SICP練習 18 練習1 24

2021-09-23 23:29:36 字數 731 閱讀 6142



練習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...