Project Euler Problem 28
問題28:渦巻状に自然数を並べた1001x1001数方陣の対角線上にある数の合計を求める。方陣の詳細はリンク先参照[=>問題文]
問題28の解答
;; Emacs Lisp (require 'cl) (defun problem028 (N) (do ((n 3.0 (+ n 2)) (result 1)) ((> n N) result) (let ((d (1- n)) (x (* n n))) (incf result x) (incf result (decf x d)) (incf result (decf x d)) (incf result (decf x d))))) (problem028 1001)
これは簡単ですね。外周の一辺のマス目の数を n とすると右上隅は n の二乗。その他の隅は n-1 ずつ減じた数になる。これを合わせれば外周上の四隅の合計が求まり、外周を増やしながらそれらを加算していけば、最終的には対角線上の総計が求まります。