練習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練習 4 練習1 8
如果對前面的內容理解透徹了,看到這個表示式就知道直接將y換成 guess 即可。define improve guess x guess guess 2 guess 3 但是如果中寫到這裡就認為完成了那就錯了,如果還是用書中的 good enough?的話,那也應該將 guess 的平方變成立方。在...
SICP練習 7 練習1 11
這種題目太像是數學題目了,不過拿到程式設計上又有一些的難度。我們先根據題目中的條件,寫出類似於第 25頁最下面的變換規則。我們先列出如下內容 a f n 1 f 2 f 3 f 4 f 5 b f n 2 f 1 f 2 f 3 f 4 c f n 3 f 0 f 1 f 2 f 3 於是繼而得出下...
SICP練習 12 練習1 18
練習1.8 和前兩題一樣,依舊是只能用對數步數。而且這個迭代過程要基於加 加倍和折半運算。這乙個習題要用到前面的函式,因此最好的做法是,每次都將寫好的 儲存起來。load test1.18.scm 這行 可以用來載入 而儲存可以用c x,c w。以下是該題的 這次我們寫成塊結構 define x y...