トップページに戻る
次のProblemへ
前のProblemへ
Problem6 最初の100個の自然数の、和の2乗と2乗の和の差
最初の10個の自然数について、その和の2乗と、2乗数の和は以下の通り。
1*1 + 2*2 + ... + 10*10 = 385
(1 + 2 + ... + 10)の2乗 = 3025
これらの数の差は 3025-385=2640となる。
同様にして、最初の100個の自然数について和の2乗と2乗の和の差を求めよ。
SQL
--■■■PL/SQLを使う方法■■■
declare
SumVal1 pls_Integer :=0;
SumVal2 pls_Integer :=0;
begin
for I in 1..100 Loop
SumVal1 := SumVal1 + I*I;
SumVal2 := SumVal2 + I;
end Loop;
DBMS_Output.Put_Line('Answer=' ||
to_char(abs(SumVal1-SumVal2*SumVal2)));
end;
/
--■■■model句を使う方法(10g以降)■■■
with tmp as(
select soeji as Val
from dual
model
dimension by(1 as soeji)
measures(0 as dummy)
rules(dummy[for soeji from 1 to 100 increment 1]= 0))
select abs(sum(Val*Val)-sum(Val)*sum(Val)) as Answer
from tmp;
--■■■再帰with句を使う方法(11gR2以降)■■■
with rec(Val) as(
select 1 from dual
union all
select Val+1
from rec
where Val+1 <= 100)
select abs(sum(Val*Val)-sum(Val)*sum(Val)) as Answer
from rec;
実行結果
Answer
--------
25164150
解説
PL/SQLを使わずに、model句や再帰with句を使うのもいいと思います。
model句を使う場合は、インラインビューが必須となります。(model句はhaving句の後で評価されるため)
C#での解