Problem 10 - 力業
お、やっと終わった。
20分くらい放置。
(define (primers n) (define (iter l) (if (null? l) '() (cons (car l) (iter (filter (lambda (o) (not (zero? (modulo o (car l))))) (cdr l)))))) (iter (cons 2 (list-tabulate (quotient (- n 1) 2) (lambda (x) (+ (* x 2) 3)))))) (apply + (primers 2000000)) ; 142913828922
30問達成!!
解答を見て勉強します。はい。
お勉強ノート1
人のソースを見ながらお勉強1
srfi-1を使って、改造してみた。
(define (prime? n) (define (trial-divisor t) (or (< n (* t t)) (and (not (zero? (remainder n t))) (trial-divisor (+ t 2))))) (if (even? n) (= n 2) (trial-divisor 3))) (apply + (filter prime? (iota (- 2000000 1) 2))) ; 142913828922
適当に割ってみる。これでも結構早い。20秒くらい。
素数判定した方が早いようだ。