【SICP练习】18 练习1.24



练习1.24

我们先将书中已给出的代码写入Edwin中。

(define (fermat-test n)

   (define (try-it a)

       (= (expmod a n n) a))

   (try-it (+ 1 (random (- n 1)))))

(define (fast-prime? n times)

   (cond ((= times 0) true)

         ((fermat-test n) (fast-prime? n (- times 1)))

         (else false)))

(define (expmod base exp m)

   (cond ((= exp 0) 1)

         ((even? exp) (remainder (square (expmod base (/ exp 2) m)) m))

         (else (remainder (* base (expmod base (- exp 1) m)) m))))

于是就有了一个新的prime?函数如下:

(define (prime? n)

   (fast-prime? n 100))

然后载入上一题中的get-time&prime函数,如果已经在上一题中保存了起来现在就可以直接load了。然后经过一番测试后,结论很明显咯。练习1.22中的get-time&prime函数的复杂度为Θ(√n),而本题中的复杂度为Θ(logn)

版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

posted @ 2015-02-07 10:28  nomasp  阅读(112)  评论(0编辑  收藏  举报