2014年3月13日木曜日

プロジェクトオイラー問28

Problem 28 「螺旋状に並んだ数の対角線」 

1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される:
2122232425
2078910
1961211
1854312
1716151413
両対角線上の数字の合計は101であることが確かめられる.
1001×1001の螺旋を同じ方法で生成したとき, 対角線上の数字の和はいくつか?

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2028



解法
規則的に増えるので規則的に計算するだけです。
数式一行になりそうですねこれ。

calc(501,Sum,_):-!,write(Sum).
calc(N,Sum,E):-
      !,
      Sum1 is Sum+4*E+2*6*N,
      E1 is E+3*2*N+N*2+2,
      N1 is N+1,
      calc(N1,Sum1,E1).
main28:-
      calc(1,1,3).

0 件のコメント:

コメントを投稿