米勒羅賓素性測試(Miller–Rabin primality test)


如何判斷一個素是素數 效率很高的篩法 打個表 (素數的倍數一定是合數) 就可以解決問題。

篩選法的效率很高,但是遇到大素數就無能為力了。

米勒羅賓素性測試是一個相當著名的判斷是否是素數的算法

核心為費馬小定理:

假如a是整數,p是質數,且a,p互質(即兩者只有一個公約數1),那么a的(p-1)次方除以p

的余數恆等於1。

逆推一下即p的 a^(p-1)%p !=1 (0<a<p) ,它一定是合數。

如果 a^(p-1)%p ==1 (0<a<p) 則它可能是合數可能是素數。概率算法的概率就在這個 a上體現。


具體過程:

1 隨機取一個 a

2 如果 它不滿足 a^(n-1)%n ==1

3 則它一定是 合數

4 退出

5 如果它滿足 a^(n-1)%n ==1

6  則它是一個素數的概率是1/2

7 回到 1


可以通過拉賓米勒素數測試的合數為偽素數與Carmichael(強偽素數)

Carmichael數是非常少的,在1~100000000范圍內的整數中,只有255個Carmichael數。

為此有二次探測定理以確保該數為素數:

如果p是一個素數,0<x<p,則方程x^2≡1(mod p)的解為x=1,p-1


說明:
Miller-Rabin是隨機算法
如果對這個過程重復100次,每次都沒說它是合數,那這個數是素數的概率只有(1/2)^5100可能不是素數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM