SICP 問題1.23
(define (next n) (if (= n 2) 3 (+ 2 n))) (define (find-divisor n test-divisor) (cond ((> (square test-divisor) n) n) ((divides? test-divisor n) test-divisor) (else (find-divisor n (next test-divisor)))))
gosh> (search-for-primes 1000 1100) 1009 *** 4 1013 *** 4 1019 *** 4 1021 *** 3 1031 *** 4 1033 *** 3 1039 *** 3 1049 *** 3 1051 *** 4 1061 *** 4 1063 *** 4 1069 *** 4 1087 *** 4 1091 *** 4 1093 *** 4 1097 *** 4 #<undef> gosh> (search-for-primes 10000 10100) 10007 *** 12 10009 *** 11 10037 *** 11 10039 *** 10 10061 *** 11 10067 *** 11 10069 *** 11 10079 *** 10 10091 *** 11 10093 *** 11 10099 *** 10 #<undef> gosh> (search-for-primes 100000 100100) 100003 *** 35 100019 *** 34 100043 *** 33 100049 *** 33 100057 *** 34 100069 *** 33 #<undef> gosh> (search-for-primes 1000000 1000100) 1000003 *** 160 1000033 *** 104 1000037 *** 104 1000039 *** 104 1000081 *** 105 1000099 *** 105 #<undef>
だいたい1.6倍になってる.ちょうど二倍にならないのはnext
でif
を使っているためだと考えられる