Problem 65 - eの連分数
翻訳無いけどやってみる。
√2の連分数は、
√2 = [1;(2)]
と表せて、
eの連分数表記は、
e = [2; 1,2,1, 1,4,1, 1,6,1 , ... , 1,2k,1, ...]
こんなんらしい。100項目の分子の数値の和を求める。
問題は長いけど、やることはシンプル。
前にも連分数が出てきたけど、今回は(1,2k,1)というちょっと変則的な連分数なので、再帰で下の方から求めていく。
連分数リストなら何でも来い的な感じに仕上げてみた。
(define (problem65 seed sequence) (let ((res (fold-right (lambda (n acc) (cons (cdr acc) (if (zero? n) n (+ (* (cdr acc) n) (car acc))))) '(0 . 1) sequence))) (cons (+ (car res) (* seed (cdr res))) (cdr res)))) (define (make-e-sequence n) (take (fold-right (lambda (n acc) (cons* 1 (* n 2) 1 acc)) '() (iota (+ (quotient n 3) 1) 1)) (- n 1))) (apply + (number->list (car (problem65 2 (make-e-sequence 10))))) ; 17 (apply + (number->list (car (problem65 2 (make-e-sequence 100))))) ; 272
無限リストが欲しくなる問題だけど、無限リストの作り方がイマイチわかんね。
number->listは略。