Problem 28 「螺旋状に並んだ数の対角線」 †
1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される:
| 21 | 22 | 23 | 24 | 25 |
| 20 | 7 | 8 | 9 | 10 |
| 19 | 6 | 1 | 2 | 11 |
| 18 | 5 | 4 | 3 | 12 |
| 17 | 16 | 15 | 14 | 13 |
両対角線上の数字の合計は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 件のコメント:
コメントを投稿