• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            CG@CPPBLOG

            /*=========================================*/
            隨筆 - 76, 文章 - 39, 評論 - 137, 引用 - 0
            數據加載中……

            我的SICP習題答案(1.24~1.28)

            1.24
            對于Fermat檢查,因為具有log n 的增長階,所以對于 n^2 和 n 的檢查的時間比 理論上應該是 2:1, 實際上,經過測試也比較接近,當n比較大時。
            若與預計不符,可能因為 n 比較小,或者字長發生變化,比如 n > 2^32 (參見下題)

            1.25
            僅從理論分析,Alyssa 的改動不會引起增長階的變化,但實際上當 Fermat 檢查的 n 稍微大一點,速度就會很慢。主要原因 就是 base^exp 是一個非常大的數,可能遠遠超過 一個32位機字的表示范圍 2^32 ,在 scheme 里可能用若干個 32-bit 靠軟件實現運算,這將導致計算急速增長。無論是傳遞、運算還是求模。
            實際上 1.22、1.23、1.24 的幾個題目可能都會遇到字長變化引起的計算速度突變。

            1.26
            Fermat 檢查正是因為 連續求平方的求冪方法,使得的增長階變為 log n, 而這均來源于 b^(2n) = (b^n)^2,
            Louis 的方法讓求冪又變成了連乘,b^(2n) = b^n*b^n = (b*b*...*b)*(b*b*...*b),求冪的增長階變成了 O(n),Fermat 檢查的增長階自然也變成了 O(n)。

            1.27
            (define (fermat-test n)
              (fermat-iter (- n 
            1) n))

            (define (fermat-iter a n)
              (cond ((
            = a 0) #t)
                    ((
            = (expmod a n n) a) (fermat-iter (- a 1) n))
                    (else #f)))

            1.28
            首先來看,Fermat 小定理的一個變形:

            p 是素數, 1<a<p, 有 a^p % p = a
            ==> a^p = kp + a ==> a^p - a = kp ==> a(a^(p-1)-1) = kp ==> a^(p-1) -1 = k'p
            ==> a^(p-1) % p = 1

            這個變形就是題目中提到的,這個形式和費馬小定理是等價的(但是奇怪的是,我沒有發現已知的幾個Carmichael數能夠躲過這個變形的檢查,有待研究

            再來看,miller-rabin 素性測試的原理:

            p 是素數, 1<a<p, 且 a^2 % p = 1
            ==> (a^2-1) % p = 0 ==> (a+1)(a-1) % p =0
            那么 a+1 % p = 0 或者 a-1 % p =0,
            又 a<p 且 p 是素數,所以
            a = 1 或者 a = p-1 (這兩個叫做 1模n的平凡平方根)

            代碼如下:
            (define (check-nontrivial-sqrt-of-one a n)
              (define (check-
            1? t)
                (if (and (> a 1
            )
                         (< a (- n 
            1))
                         (
            = t 1))
                    
            0 t))
              (check-
            1? (remainder (square a) n)))

            (define (expmod base exp m)
              (cond ((
            = exp 01)
                    ((even? exp)
                     
            ;(remainder (square (expmod base (/ exp 2) m)) m))
                     (check-nontrivial-sqrt-of-one (expmod base (/ exp 2) m) m))
                    (else
                     (remainder (* base (expmod base (- exp 
            1) m)) m))))

            (define (miller-rabin-test n)
              (define (iter x n)
                (cond ((
            = x 0) #t)
                      ((
            = (expmod x (- n 1) n) 1) (iter (- x 1) n))
                      (else #f)))
              (iter (- n 
            1) n))

            ① 對于
            Carmichael 數 n ,實際上不能完全通過 a^(n-1)%n = 1 的檢查,除非 a 與 n 互素,當 a 為 n 的素因子時,不能通過,比如 Carmichael 第一個 561 = 3*11*17, 而 3^560%561 = 375 ≠ 1 。可以程序驗證這個。 所以我認為,a^(n-1)%n = 1 的檢查比 a^n%n = a 的檢查更嚴格,是不是不存在合數通過完全的 a^(n-1)%n = 1 的檢查呢?我不敢說。但把這個結論暫時記在這里,希望能得到幫助或者反駁。2008-04-02 23:56


            posted on 2008-03-31 00:21 cuigang 閱讀(1545) 評論(2)  編輯 收藏 引用 所屬分類: Lisp/Scheme我的SICP答案

            評論

            # re: 我的SICP習題答案(1.24~1.28)  回復  更多評論   

            a^(n-1)%n = 1 跟 a^n%n = a 應該是完全等價的吧?
            2009-03-25 21:10 | pgw

            # re: 我的SICP習題答案(1.24~1.28)  回復  更多評論   

            @pgw

            好吧。。 我錯了
            2009-03-25 21:42 | pgw
            久久国产成人精品国产成人亚洲| 青青青伊人色综合久久| 国产AⅤ精品一区二区三区久久| 熟妇人妻久久中文字幕| 欧美伊人久久大香线蕉综合| 综合久久一区二区三区 | 精品国产91久久久久久久| 亚洲级αV无码毛片久久精品| 久久人人爽人人爽人人片av麻烦 | 性做久久久久久久久老女人| 久久久久国产| 久久久久亚洲国产| 综合久久国产九一剧情麻豆| 狠狠综合久久综合88亚洲| 亚洲∧v久久久无码精品| 国产亚洲色婷婷久久99精品| 99久久国语露脸精品国产| 66精品综合久久久久久久| 久久久精品久久久久特色影视| 天堂无码久久综合东京热| 97精品伊人久久大香线蕉| 激情伊人五月天久久综合| 一本大道加勒比久久综合| 欧美日韩中文字幕久久久不卡 | 一本一本久久a久久综合精品蜜桃| 亚洲综合熟女久久久30p| 99久久精品国产高清一区二区| 精品人妻伦九区久久AAA片69| 精品伊人久久大线蕉色首页| 青青青青久久精品国产| 久久综合一区二区无码| 欧洲精品久久久av无码电影| 精品久久久久久国产91| 久久只有这里有精品4| 99久久人妻无码精品系列| 午夜福利91久久福利| 国产成人无码久久久精品一| 无码8090精品久久一区| 久久亚洲国产中v天仙www| 亚洲av日韩精品久久久久久a| 精品久久国产一区二区三区香蕉 |