Miller Rabin 質數檢測

2022-05-31 08:24:14 字數 3287 閱讀 2568

列舉\(2\sim \sqrt\)中的整數判斷\(n\)是否為質數的方法在\(n\)特別大的時候就失去了其價值,\(\texttt\)素數檢測利用了一些質數的性質在乙個錯誤概率非常小的前提下進行判斷。

當\(a\)不被質數\(p\)整除時,\(a^\equiv 1\ (\operatorname\ p)\),其實質是尤拉定理的乙個特殊形式。但其逆定理是不成立的,所以不能單純地說滿足這一性質的數即為質數,只能說是質數的概率更大。

如果我們在\([2,n-1]\)的範圍內多次隨機得到的數都滿足\(a^\equiv 1\ (\operatorname\ n)\)時,\(n\)就有很大的概率是乙個質數。

為了進一步減小出錯的概率,還需要找到其它性質來幫忙。

我們將滿足\(\forall a\perp n,a^\equiv 1\ (\operatorname\ n)\)的合數\(n\)稱為卡麥可數,也叫做費馬偽素數。

乙個整數\(n\)為卡麥可數當且僅當:

\(n\)無平方因子

對於任一質因子\(p\)都有\(p-1|n-1\)

至少是三個質數的乘積

[click]

用反證法,假設\(n=p^m(\alpha \ge 2,p\perp m)\)且為卡麥可數,則根據中國剩餘定理,\(\begin

x\equiv 1+p\ (\operatorname\ p^)\\

x\equiv 1\ (\operatorname\ m)

\end\)存在乙個解\(a\)。顯然\(a\perp n\)。

由於\(n\)為卡麥可數,則:

\[\begina^&\equiv 1\ (\operatorname\ n)\\

\leftrightarrow a^&\equiv 1\ (\operatorname\ p^)\\

\rightarrow a^&\equiv a\ (\operatorname\ p^)\\

\leftrightarrow (1+p)^n&\equiv 1+p\ (\operatorname\ p^)\\

\end\]

又由二項式定理:

\[\begin& (1+p)^n\\

= & \sum_^n \binomp^i\\

\equiv & \binomp^1+\binomp^0\\

\equiv & np+1\\

\equiv & 1\ (\operatorname\ p^)

\end\]

則得到了\(1\equiv 1+p\ (\operatorname\ p^)\),矛盾,由此得出\(n\)無平方因子。

由於\(n\)無平方因子,則\(p\perp n/p\)。質數的指數迴圈節易證為\(p-1\)。

\[\begin&a^\equiv 1\ (\operatorname\ n)\\

\leftrightarrow & a^\equiv 1\ (\operatorname\ p)\\

\leftrightarrow & p-1|n-1

\end\]

如果\(n\)為兩個質數的乘積,不妨設\(n=pq,p。

\[\begin& q\equiv 1\ (\operatorname\ q-1)\\

\rightarrow & n-1=pq-1\equiv p-1\ (\operatorname\ q-1)\\

\end\]

\(0與上面所證的\(q-1|n-1\)矛盾。

—————————————————————————————————————————————

顯然其為奇數。

且若乙個數\(n\)為卡麥可數,則\(2^n-1\)也為卡麥可數,因此卡麥可數是有無窮多個的。證明略去(不會證),詳見 oeis a006931 。

若\(p\)為奇素數且\(\alpha \le 1\),則方程\(x^2\equiv 1\ (\operatorname\ p^)\)在模意義下僅有兩個解,即\(x=\pm 1\)。若乙個奇數存在非平凡的解,則說明其為合數。

[click]

\[p\ge 3,x\ge 2\rightarrow x+1\perp x-1

\]\[\begin& x^2\equiv 1\ (\operatorname \ p^)\\

\leftrightarrow & p^|(x+1)(x-1)\\

\leftrightarrow & p^|x+1 \ or\ p^|x-1

\end\]

由卡麥可數的性質可知,其必不為\(p^\)的形態。結合費馬小定理二次探測原理即可行之有效地排除偽質數進行質數檢測。

其過程大致為:

設檢測的數為\(n\),將\(n-1\)分解為\(2^t u,2\not\mid u\)的形式。選取\(s\)作為檢驗的次數,在這\(s\)次中每次選擇乙個屬於\([2, n-1]\)的數\(a\),先算出\(a^u\)模\(n\)的值,再將它平方\(t\)次。若在平方的過程中發現了模意義下的1的非平凡平方根,即立刻判斷為合數,或平方完得到\(a^\not \equiv 1\ (\operatorname)\)也說明這是合數;若一直平方到\(a^\)都沒有出現上述情況,則此次判斷中視為該數為質數。當然,通過一次判斷並不代表這就是質數了,只能說是質數的可能性更大。

若\(n\)是乙個奇合數,則在上述過程中能判斷\(n\)為合數的數的個數至少為\((n-1)/2\);對於\(\forall n,s\),\(\texttt\)檢測出錯的概率至多為\(2^\)。證明略(太麻煩)。

所以只需要乙個適合的判斷次數以及乙個靠譜的隨機數生成方式,就可以將判斷出錯的概率控制在乙個很小很小的範圍內。經大量的研究表明,對幾乎所有可以想象到的應用選取\(s=50\)應該都是足夠的。

【模板】 loj143 質數判定

[click]

#include #include #include #include typedef long long ll;

typedef long double ld;

ll random(ll n)

ll mul(ll a,ll b,ll p)

//ll mul(ll a,ll n,ll p)

//// return res;

//}ll power(ll a,ll n,ll p)

return res;

}bool millerrabin(ll n)

pre=a;

} if (a!=1)

return 0;

} return 1;

}int main()

Miller Rabin質數測試

費馬小定理 對於質數p和任意整數a,有a p a mod p 同餘 反之,若滿足a p a mod p p也有很大概率為質數。將兩邊同時約去乙個a,則有a p 1 1 mod p 也即是說 假設我們要測試n是否為質數。我們可以隨機選取乙個數a,然後計算a n 1 mod n,如果結果不為1,我們可以...

Miller Rabin質數測試

1.費馬小定理 費馬小定理 對於質數p和任意整數a,a p 1 mod 1不滿足的一定是合數,滿足的大概率是素數。2.miller rabin質數測試 如果滿足費馬小定理,則進一步驗證如果p是奇素數,則 x 2 1 mod p 的解為 x 1 或 x p 1 mod p 乙個例子 舉個matrix6...

Miller Rabin質數測試

這種質數演算法是基於費馬小定理的乙個擴充套件。費馬小定理 對於質數p和任意整數a,有a p a mod p 同餘 反之,若滿足a p a mod p p也有很大概率為質數。將兩邊同時約去乙個a,則有a p 1 1 mod p 也即是說 假設我們要測試n是否為質數。我們可以隨機選取乙個數a,然後計算a...