初等数论--同余--Fermat素性检测算法(为什么每次概率改变1/2)
初等數論--同余--Fermat素性檢測算法(為什么每次概率改變1/2)
- 為什么每次概率改變1/2
博主是初學初等數論(整除+同余+原根),本意是想整理一些較難理解的定理、算法,加深記憶也方便日后查找;如果有錯,歡迎指正。
我整理成一個系列:初等數論,方便檢索。
費馬小定理,對于a∈Z,pa\in Z,pa∈Z,p為素數,有ap?1≡1(modp)a^{p-1}\equiv 1(mod p)ap?1≡1(modp)
這是由已知素數推公式,那么如果已有公式呢?能推測p就一定是素數嗎?這就是費馬素性檢測算法要告訴我們的內容,p是素數的概率。
偽素數:如果nnn是奇合數,對于b∈Z,b\in Z,b∈Z,有bn?1≡1(modn),b^{n-1}\equiv 1(mod n),bn?1≡1(modn),那么稱nnn是對于基bbb的偽素數。(偽素數不能單獨存在,一定是針對某一個基成立的性質)
算法流程:
給定某一奇整數n≥3n\ge 3n≥3和安全參數kkk,即檢測不超過kkk次。
- 隨機取某一整數bbb,
- 令g=(b,n)g=(b,n)g=(b,n),如果g≠1g\neq1g?=1,則"nnn為合數";
- 令h=bn?1(modn)h=b^{n-1}(mod n)h=bn?1(modn),如果h≠1h\neq 1h?=1,則"nnn為合數";
- 如果以上兩條皆不滿足,那么"nnn可能為素數";
- 重復kkk次,如果得到一次"nnn為合數",則nnn為合數;若每次都得到"nnn可能為素數",則nnn為素數的概率為1?12k1-\frac1{2^k}1?2k1?
我有一個問題還沒有解決,為什么是12k,\frac1{2^k},2k1?,素數合數的分布是不均勻的,為什么能用12\frac{1}{2}21?來考慮呢?
答案來源于 Cryptography Theory and Practice
為什么每次概率改變1/2
- 事件aaa:奇整數nnn是合數
- 事件a′a'a′:奇整數nnn是素數
- 事件bbb:連續回答mmm次“nnn是素數”
我們想計算的是Pr[a][b]Pr[a][b]Pr[a][b],利用貝葉斯定理,從Pr[b][a]和Pr[a]Pr[b][a]和Pr[a]Pr[b][a]和Pr[a]來推出。
- Pr[b][a]:Pr[b][a]:Pr[b][a]:假如奇整數nnn是合數,那么“回答一次nnn是素數”的概率≤1/2\le 1/2≤1/2,“連續回答mmm次nnn是素數”的概率≤2?m\le 2^{-m}≤2?m,即Pr[b][a]≤2?mPr[b][a]\le 2^{-m}Pr[b][a]≤2?m
- Pr[a]:Pr[a]:Pr[a]:設N≤n≤2N,N\le n\le2N,N≤n≤2N,需要知道的是N~2NN\sim2NN~2N間共有多少個奇整數,又有多少個素數,再計算概率。
- N~2NN\sim 2NN~2N奇整數個數:2N?N2=N2\frac{2N-N}{2}=\frac{N}{2}22N?N?=2N?
- N~2NN\sim 2NN~2N素數個數:由素數定理,我們知“≤N\le N≤N的素數共有NlnN\frac{N}{ln N}lnNN?個”,所以:2Nln2N?NlnN=2NlnN+ln2?NlnN(\\ \frac{2N}{ln 2N}-\frac{N}{ln N}\\ =\frac{2N}{ln N+ln 2}-\frac{N}{ln N}(ln2N2N??lnNN?=lnN+ln22N??lnNN?(因為N?2,N\gg 2,N?2,所以lnN+ln2≈lnNln N+ln 2\approx ln NlnN+ln2≈lnN)≈2NlnN?NlnN=NlnN\\ \approx \frac{2N}{ln N}-\frac{N}{ln N}\\ =\frac{N}{ln N}≈lnN2N??lnNN?=lnNN?
- nnn是合數的概率:Pr[a]=1?NlnNN2=1?2lnNPr[a]=1-\frac{\frac{N}{ln N}}{\frac{N}{2}}=1-\frac{2}{ln N}Pr[a]=1?2N?lnNN??=1?lnN2?
- Pr[a][b]:Pr[a][b]:Pr[a][b]:由貝葉斯定理知:Pr[a][b]=Pr[ab]Pr[b]=Pr[b][a]?Pr[a]Pr[b]=Pr[b][a]?Pr[a]Pr[b][a]?Pr[a]+Pr[b][a′]?Pr[a′]\\ Pr[a][b]\\ =\frac{Pr[ab]}{Pr[b]}\\ =\frac{Pr[b][a]·Pr[a]}{Pr[b]}\\ =\frac{Pr[b][a]·Pr[a]}{Pr[b][a]·Pr[a]+Pr[b][a']·Pr[a']}Pr[a][b]=Pr[b]Pr[ab]?=Pr[b]Pr[b][a]?Pr[a]?=Pr[b][a]?Pr[a]+Pr[b][a′]?Pr[a′]Pr[b][a]?Pr[a]?
因為Pr[b][a′]=1,Pr[a′]=2lnNPr[b][a']=1,Pr[a']=\frac{2}{ln N}Pr[b][a′]=1,Pr[a′]=lnN2?,所以Pr[a][b]=Pr[b][a]?(1?2lnN)Pr[b][a]?(1?2lnN)+(2lnN)=Pr[b][a]?(lnN?2)Pr[b][a]?(lnN?2)+2=lnN?2lnN?2+2Pr[b][a](因為Pr[b][a]≤2?m)≤lnN?2lnN?2+2m+1\\ Pr[a][b]\\ =\frac{Pr[b][a]·(1-\frac{2}{ln N})}{Pr[b][a]·(1-\frac{2}{ln N})+(\frac{2}{ln N})}\\ =\frac{Pr[b][a]·(ln N-2)}{Pr[b][a]·(ln N-2)+2}\\ =\frac{ln N-2}{lnN-2+\frac{2}{Pr[b][a]}}(因為Pr[b][a]\le 2^{-m})\\ \le\frac{ln N-2}{lnN-2+2^{m+1}}Pr[a][b]=Pr[b][a]?(1?lnN2?)+(lnN2?)Pr[b][a]?(1?lnN2?)?=Pr[b][a]?(lnN?2)+2Pr[b][a]?(lnN?2)?=lnN?2+Pr[b][a]2?lnN?2?(因為Pr[b][a]≤2?m)≤lnN?2+2m+1lnN?2?
當mmm很大時,Pr[a][b]≤2?(m+1)Pr[a][b]\le 2^{-(m+1)}Pr[a][b]≤2?(m+1),與2?m2^{-m}2?m的差距很小,可以近似,即Pr[a][b]≤2?mPr[a][b]\le 2^{-m}Pr[a][b]≤2?m,所以nnn為素數的概率≥1?2?m\ge 1-2^{-m}≥1?2?m
總結
以上是生活随笔為你收集整理的初等数论--同余--Fermat素性检测算法(为什么每次概率改变1/2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初等数论--同余--欧拉函数、欧拉定理、
- 下一篇: 初等数论--同余--MILLER-RAB