美文网首页
Scheme实现费马检查

Scheme实现费马检查

作者: 勇敢的花生 | 来源:发表于2017-06-12 22:29 被阅读0次

    费马小定理:如果n是一个素数,a是一个小于n的正整数,那么a的n次方与a模n同余
    这是一个充分条件,但是反之是一个很强的理由,也就是说对于任意的数n,在1到n之间随机的选择一个数,若(a^n) mod n == a mod n,那么就可以有很强的理由相信n是一个素数,在100 000 000之内仅有255个素数,不满足费马定理的逆命题。相比于时间复杂度为O(sqrt(n))朴素检测素数法,在有限次的测试中能极大概率的判断一个素数是极其有吸引力的。

    ( 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 ) ) ) )
    
    ( 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 ) ) )
    
    
    
    Scheme实现费马检查

    相关文章

      网友评论

          本文标题:Scheme实现费马检查

          本文链接:https://www.haomeiwen.com/subject/qserqxtx.html