您的位置:首页 > 其它

【SICP练习】18 练习1.24

2015-02-07 10:28 148 查看


练习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)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: