隨機算法 MillerRabin素數測試是3/4正確的蒙特卡洛算法

隨機算法 MillerRabin素數測試是3/4正確的蒙特卡洛算法

爲什麼MillerRabin素數測試優於簡單利用費馬定理的測試呢?
當我們利用費馬小定理測試一個數是否是素數的時候,如果返回假,那麼100%確定這
個數是合數,但是如果返回值是真,有多少出錯的可能呢。如果a^(n-1)mod n =1並
且n是一個合數那麼這個a就叫做n的一個假見證,我們做個這樣的一個統計,在小於1000
的奇合數中有多少個假見證呢。
小於1000的奇合數有332個,在這332個奇合數中僅有5個數沒有假的見證,
超過一半的有兩個假見證,只有16%的有超過15個假見證。
一共有4490個假見證。但是總共有172828個見證可以選擇。
所以總之,小於1000的奇合數,出錯的可能是3.3%,而在更大的數域內出錯的概率會降低。
但是並不是每一個奇合數都只有少量的假見證,有的數有很多的假見證,所以特別的對這種
數出錯的概率是很大的,例如:561有318個假見證,再如對於這個15位的數651693055693681,
出錯的概率爲99.9965%,所以說如果費馬小定理測試法是p-correct的,那麼這個p值是不確定的。

但是基於MillerRabin的素數測試呢?
考慮,測試算法中的witness(a,n)如果返回真,那麼n一定是合數,如果返回假,那麼n是素數
的概率有多大呢?對於任意的a如果witness(a,n)返回假,那麼當且僅當a屬於B(n)。如果n是
一個奇合數,那麼如果a屬於B(n),則,a叫做n的強假見證,可以預見的是強假見證個數比假見
證更爲稀少,具體的在小於1000的數中,隨機選擇一個數是強假見證的概率小於1%,超過72%的
奇合數沒有強假見證
不加證明的給出以下定理
【如果n是素數則有B(n)={a|2<=a<=n-2},如果n是合數則有|B(n)|<=(n-9)/4】
所以MillerRabin素數測試算法是一個3/4正確的蒙特卡洛算法,如果k次運行該算法,則
出錯的概率可以降低到(1/4)^k。這是一個相當理想的結果了。

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