【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)。
练习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)。
相关文章推荐
- 【SICP练习】18 练习1.24
- SICP 练习1.18
- SICP 练习2.34 多项式求值(horner规则)
- 郭克华手机编程教学视频----我的练习源码(18)Canvas事件监听:
- 蓝桥杯 BASIC-18 基础练习 矩形面积交
- 【SICP练习】79 练习2.51
- 【SICP练习】59 练习2.29
- 【SICP练习】122 练习3.53
- 【SICP练习】49 练习2.17
- 【SICP练习】25 练习1.31
- 【SICP练习】146 练习4.2
- 【SICP练习】48 练习:2.7-2.16【待添加】
- 【SICP练习】126 练习3.57
- 【SICP练习】99 练习2.75
- 【SICP练习】4 练习1.8
- 【SICP练习】43 练习2.2
- 【SICP练习】49 练习2.17
- 【SICP练习】65 练习2.36
- 【SICP练习】81 练习2.53
- 【SICP练习】91 练习2.64