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倍になってる.ちょうど二倍にならないのはnextifを使っているためだと考えられる


© 2022 wat-aro