Problem 5 最小公倍数

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

問題

1~20の最小公倍数を求めているだけ

プログラム:

% problem 5

solve:-
calc_lcm_all([2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],Lcm),
write(Lcm).

% すべての数字の最小公倍数を取得
calc_lcm_all([],1):-!.
calc_lcm_all([First|Rest],Lcm):-
calc_lcm_all(Rest,LcmRest),
lcm(First,LcmRest,Lcm).

% 最小公倍数
lcm(N, M, Lcm) :-
Gcd is gcd(N , M),
Lcm is (N * M) // Gcd, !.

実行結果:
[2] 9 ?- time(solve).
232792560
% 79 inferences, 0.000 CPU in 0.000 seconds (?% CPU, Infinite Lips)
true.

コメントを残す

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

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