隨機算法 素數測試

素數測試

費馬定理進行素數測試
如果n不能整除a則有a^(n-1) mod n = 1,通過判斷費馬定理的模等式是否成立就可以判斷
一個數是不是合數(顯然,如果一個數是合數那麼等式一定不成立)但是,如果等式成立,
n還是有可能是合數(僞素數:1387等)。

MillerRabin素數測試
基於:1,a^(n-1) mod n = 1,2,x^2 mod n = 1;
通過以下幾個手段達到更好的測試效果:
1, 隨機選擇a
2, 如果在運行a^(n-1) mod n = 1的過程中,發現x^2 mod n = 1成立,那麼n肯定是
合數,就沒有必要繼續下去。通過一下具體過程實施:
將a^(n-1) mod n = 1中的冪n-1分成n-1=2^t*u,基於a^(xy)mod n = ((a^x)mod n *(a^y)mod n)mod n,
所以先算m = a^u,然後在循環中計算p = (m^(t/2)*m^(t/2))mod n這樣,如果p=1,
並且m^(t/2)!=1&&m^(t/2)!=n-1則根據x^2 mod n = 1,有n一定是一個合數。這樣就不需要繼續測試下去了。

MillerRabin素數測試程序:點擊此處

 

 

發佈了43 篇原創文章 · 獲贊 10 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章