2015/10/07
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
を使っているためだと考えられる