2014年3月18日火曜日

プロジェクトオイラー Problem 45 「三角数, 五角数, 六角数」 †

Problem 45 「三角数, 五角数, 六角数」 

三角数, 五角数, 六角数は以下のように生成される.
三角数Tn=n(n+1)/21, 3, 6, 10, 15, ...
五角数Pn=n(3n-1)/21, 5, 12, 22, 35, ...
六角数Hn=n(2n-1)1, 6, 15, 28, 45, ...
T285 = P165 = H143 = 40755であることが分かる.
次の三角数かつ五角数かつ六角数な数を求めよ.
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2045




解法
逐次的に計算するだけです。


fp1(N,N1):-N1 is (N*(3*N-1))//2.
fh1(N,N1):-N1 is N*(2*N-1).


search(P,H):-
      fp1(P,P1),
      fh1(H,H1),
      P1=:=H1,
      !,
      write(P1).
search(P,H):-
      fp1(P,P1),
      fh1(H,H1),
      P1<H1,
      !,
      P2 is P+1,
      search(P2,H).
search(P,H):-
      !,
      H2 is H+1,
      search(P,H2).
main45:-
      search(166,144).

0 件のコメント:

コメントを投稿