Problem 44 - 五角数
五角数に関する問題。
2つの五角数の和と差を取って、五角数になるものを見つける。
五角数チェックは前に書いたのでコピッペで。
2つの和と差は五角数キャッシュを持っておいて、キャッシュと比較してく事にする。
(define (problem44) (letrec ((pentagonal? (lambda (n) (integer? (/ (+ (sqrt (+ 1 (* 24 n))) 1) 6)))) (iter (lambda (n acc) (let* ((p (/ (* n (- (* 3 n) 1)) 2)) (res (find (lambda (a) (and (pentagonal? (+ p a)) (pentagonal? (- p a)))) acc))) (if res (- p res) (iter (+ n 1) (cons p acc))))))) (iter 2 '(1)))) (problem44) ; 5482660
とりあえず紙に展開してみると解き方がわかってくるな。