Problem 6 2乗和の差

プロジェクトオイラーをPrologで解く

問題

最初のほうのはみんな簡単ですね…歯ごたえあるやつまでとばしてやるかな…

プログラム:

% problem 6

solve:-
make_list(100,L),
calc_pow2_sum(L,PowSum),
calc_sum(L,Sum),
SumPow is Sum * Sum,
Ans is SumPow - PowSum ,
write(Ans).

calc_pow2_sum([],0):-!.
calc_pow2_sum([First|Rest],PowSum):-
FirstPow is First * First,
calc_pow2_sum(Rest,PowSumRest),
PowSum is FirstPow + PowSumRest.

calc_sum([],0):-!.
calc_sum([First|Rest],Sum):-
calc_sum(Rest,RestSum),
Sum is First + RestSum.

% 1 ~ Idx までのリストを作成
make_list(Idx,List):-
make_list_sub(Idx,List,[]).

make_list_sub(0,Ret,Ret):-!.
make_list_sub(Idx,Ret,List):-
Idx1 is Idx - 1,
make_list_sub(Idx1,Ret,[Idx | List]).

実行結果:
1 ?- solve.
25164150
true.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>