素數測試
費馬定理進行素數測試
如果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素數測試程序:點擊此處