Miller-Rabin测试-大素数问题

来源:互联网 发布:淘宝客推给小号买 编辑:程序博客网 时间:2024/06/04 22:50

【基本定理】

——【定理】①費馬小定理: 假如p是质数,且(a,p)=1,那么a^(p-1) ≡1(mod p)

——【定理】②二次探測定理:如果p是一个素数,0<x<p,则方程x^2≡1(mod p)的解为x=1,p-1

【推倒】

——有上述兩定理可以排除大多不是素數的情況。

——對於②二次探測定理 的詳細說明:一個不為1的數n通過了費馬小定理測試后,需要進行二次探測定理測試進一步判斷是否為素數。令n=1+m*2^j,其中m為奇數,j為正整數。若n為奇數,那麼對於任意一個底a,若n為素數那麼有a^n=1(mod n)或(a^n)^(2^j)=-1(mod n)成立。MillerRabin算法的核心便在於此。

【算法流程】

——【變量說明】:n是需要判斷的數,m,n,j,i,v為臨時變量

——【第一步】:計算m,j使得n=m*2^j+1

——【第二步】:隨機一個b且b不是n的倍數,計算v=b^m%n,若v為1則通過測試并且算法結束

——【第三步】:令i=1

——【第四步】:如果v=n-1則通過測試並且算法結束

——【第五步】:如果i=j無法通過測試並且算法結束

——【第六步】:v=v^2%n,i++,轉到第三步

【附注】

——算法的正確性75%左右,斷幾p次正確率為1-(1/4)^p

——如果n<1373653,那麼通過2,3為底的測試就是素數

——如果n<25326001,那麼通過2,3,5為底的測試就是素數

——如果n<25000000000,那麼通過2,3,5,7為底的測試就是素數

——如果n<2152302898747,那麼通過2,3,5,7,11為底的測試就是素數

——如果n<3474749660383,那麼通過2,3,5,7,11,13為底的測試就是素數

——如果n<341550071728321,那麼通過2,3,5,7,11,13,17為底的測試就是素數 

——如果n<9080191,那麼通過31,73為底的測試就是素數

——如果n<4759123141,那麼通過2,7,61為底的測試就是素數

——如果n<170584961,那麼通過350,3958281543為底的測試就是素數

——如果n<75792980677,那麼通過2,379215,457083754為底的測試就是素數

——如果n<21652684502221,那麼通過2,1215,34862,574237825為底的測試就是素數