「プロジェクトオイラー問6」の編集履歴(バックアップ)一覧はこちら
「プロジェクトオイラー問6」(2014/02/12 (水) 15:49:09) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*Problem 6 「二乗和の差」 †
最初の10個の自然数について, その二乗の和は,
1^2 + 2^2 + ... + 10^2 = 385
最初の10個の自然数について, その和の二乗は,
(1 + 2 + ... + 10)^2 = 3025
これらの数の差は 3025 - 385 = 2640 となる.
同様にして, 最初の100個の自然数について二乗の和と和の二乗の差を求めよ.
解法
数学の公式を使えば一行で答えが出ますが。
せっかくプログラム言語があるのだし逐次的に求めてみましょう。
再帰で足す数Nを1ずつ足す数を増加させながら2乗の和と普通の和を足して、最後に普通の和を2乗してその差分をとれば答えです。
calc(Stop,Stop,Sum1,Sum2,Ans):-!,
Ans is Sum1*Sum1-Sum2.
calc(N,Stop,Sum1,Sum2,Result):-
Sum11 is Sum1+N,
Sum22 is Sum2+N*N,
N1 is N+1,
calc(N1,Stop,Sum11,Sum22,Result).
main6:-calc(1,101,0,0,Ans),write(Ans).