練習1.27
這道題的場景是在注釋47中,博主更關心的問題是:(第三行)撞上能欺騙費馬檢查的值的概率有多少,居然會比什麼宇宙射線造成計算機出差。後者個人感覺是永遠不會發生的,前者倒是還有可能發生。希望把前者的概率算出來的童鞋將過程列出來啦!
言歸正傳,題目的意思就是要去驗算注釋47中的那幾個carmichael,那就來code吧:
(define (find-carmichael n)
(define (find-carmichael-test x n)
(cond((= x n) #t)
((same-remainder?x n)
(find-carmichael-test(+ x 1) n))
((else#f)))
(define (same-remainder? x n)
(= (expmod x n n) x))
(find-carmichael-test 1 n))
當然了,這裡要load儲存好的expmod函式。然後就是測試了:
(carmichael-test 6601)
;value: #t
其他的都一樣的返回結果,不然就是函式寫錯了。
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...
SICP練習 17 練習1 23
練習1.23 首先我們按照題目要求來寫出相應的next函式,然後再修改find divisor函式。define next x if x 2 3 n 2 define find divisor ntest divisor cond square test divisor n n divides?te...