大數素性檢測


大數素性檢測的數學理論基礎分析

大數的素性檢測可以分為確定性的素性檢測概率性的素性檢測

確定性的素性檢測在小整數的素性檢測中雖然已經夠用,但是在大整數的素性檢測中,這些算法明顯復雜度大大增加,所以人們又尋找到了更加高效的概率性素性檢測來尋找大素數。

這里僅僅舉出比較常見或者比較著名的素性檢測方法。

確定性素性檢測

1.廣義歐幾里得定理素性檢測

\[\forall n\in N^{+},如果對所有i\le\sqrt{n},i\in N^{+},滿足i\not\mid n,則n為素數。。 \]

想法

對於這個素性檢測的一種優化是i可以換作小於n的平方根的素數,因為小於n的平方根的數都有素因子,所以可以優化,但是這種優化僅僅對於小整數而言好用。

這里的時間復雜度仍然是指數級的,但是我們期望能夠有多項式級的算法,幫助我們高效進行素性檢測。

時間復雜度

\[O(2^{(logN)/2}) \]

2.Lucas–Lehmer素性檢驗(用於梅森數的檢驗)

\[梅森數是形如2^{n}-1的數,記為M_n;若其為素數,則稱之為梅森素數。 \]

並且當n為合數時,梅森數也為合數;當n為素數是,梅森數不一定都是素數

\[\begin{align*} &1.定義序列 S_{i},i>0\\ &2.S_i=4,i=0;\\ &3.S_i=S_{i-1}^2-2,i>0\\ &4.那么M_n為素數當且僅當S_{n-2} \equiv0(modM_n)\\ &5.否則M_p為合數\\ &6.時間復雜度O(n^{3}) \end{align*} \]

想法

這里的確定性算法雖然時間復雜度很低,但是僅僅適用於梅森數的檢驗,十分具有局限性,但是對於大素數的尋找很有幫助,最近幾個最大素數便是該算法尋找到的。

在這個結論的證明中,因為這是個序列,所以自然而然想到用數學歸納法,但是其中構造的方法頗為巧妙,構造一對

\[{\displaystyle \omega {\bar {\omega }}=(2+{\sqrt {3}})(2-{\sqrt {3}})=1} \]

用於證明每個Si都滿足

\[{\displaystyle s_{i}=\omega ^{2^{i}}+{\bar {\omega }}^{2^{i}}} \]

證明充分性時,運用了反證法,再引入群的概念,通過群元素的階和素因子的性質導出矛盾。

證明必要性時,運用了二次剩余,歐拉准則,費馬小定理以及初等群論等來證明。

同樣的,也有同類型的素性檢測,Pepin測試,但是它也僅適用於費馬數,這樣的局限性過於致命

3.AKS素性測試(僅了解)

想法

這是最為著名的確定性素性測試,因為它的出世成功使素數判定的時間復雜度降到了多項式復雜度,並且沒有依賴任何未得到證明的猜想。

該證明涉及費馬小定理,群、環和域等知識,中間具體內容本人難以理解。

AKS素性測試主要是基於以下定理

\[(x+a)^n\equiv(x^n+a)(mod x^{r-1},n) \]

具體計算中可以使用貝祖定理進行公約數的計算。

算法操作:

\[\begin{align*} &1.輸入:整數 n > 1\\ &2.若存在整數a > 0 且b > 1 ,令 n = ab ;則輸出合數\\ &3.找出最小的 r 令 ordr(n) > log2(n).\\ &4.若對某些a ≤ r,1 < gcd(a,n) < n,輸出合數。(gcd是指最大公約數)。\\ &5.若 n ≤ r, 輸出素數。\\ &6.對 a = 1 到 {\displaystyle \scriptstyle \lfloor \scriptstyle {\sqrt {\varphi (r)}}\log(n)\scriptstyle \rfloor }\scriptstyle \lfloor \scriptstyle {\sqrt {\varphi (r)}}\log(n)\scriptstyle \rfloor 的所有數, 如果 (X+a)n≠ Xn+a (mod Xr − 1,n), 輸出合數。\\ &7.輸出素數。 \end{align*} \]

概率性素性檢測

1.費馬素性檢驗(主要找課外知識)

想法

這個素性檢驗是根據費馬小定理的逆定理來篩選大素數的。

\[如果p是素數,{\displaystyle 1\leq a\leq p-1},那么a^{{p-1}}\equiv 1{\pmod {p}} \]

但是由於其逆定理並不正確,對於卡邁克爾數即滿足費馬小定理的逆定理但是不為素數的數,雖然卡邁克爾數很少,在1~100000000范圍內的整數中,只有255個卡邁克爾數,但是已經使他的效果落后於Miller-RabinSolovay-Strassen素性檢驗。

\[\begin{align*} &1.輸入:n\ge3;k:參數之一來決定檢驗需要進行的次數。\\ &2.輸出:當n是合數時,否則可能是素數:\\ &3.重復k次:\\ &在[2, n − 2]范圍內隨機選取a\\ &如果a^{n − 1} mod n ≠ 1那么返回合數\\ &返回可能是素數 \end{align*} \]

出錯的概率

在選取底數a時,有二分之一的概率出錯,但是可以通過多次選取底數來使出錯概率降下期望值。

\[在重復k次成立的情況下,n為合數的可能性小於\frac{1}{2^k} \]

突破

2016年,我國物流工人提出了卡邁克爾數判別准則

\[\begin{align*} &n=(6k+1)(18k+1)(54k^2+12k+1)=5832^4+2592k^3+450k^2+36k+1\\ &(n-1)/(6k)=972k^3+432k^2+75k+6\\ &(n-1)/(18k)=324k^3+144k^2+25k+2\\ &(n-1)/(54k^2+12k)=108k^2+24k+3 \end{align*} \]

如果6k+1,18k+1,54k^2+12k+1都是素數(比如k=1,2),那么n必然是卡邁克爾數,與先前的判別法相比,這個公式的亮點就是新發現的二次式也可以作為卡邁克爾數因子。

時間復雜度

\[O(k×log3n) \]

2.歐拉-雅克比偽素數和Solovay-Stassen素性檢驗(主要找課外知識)

想法

在模平方剩余判別時,歐拉判別法則要求模為奇素數,但是雅克比符號弱化了這樣的條件,只要求模為奇整數,這樣的變化可以用於判斷模平方剩余,但是和歐拉定理不能等價,於是會存在偽素數。

歐拉偽素數:

設n為正奇合數,設整數b與n互素。如果整數n和b滿足條件

\[b^{\frac{n-1}{2}}\equiv(\frac{b}{n})(modn) \]

則n叫做對於基b的歐拉-雅克比偽素數。

Solovay-Stassen算法:

\[\begin{align*} &1.輸入:n,一個值以測試素性 k,其確定測試的准確性的參數\\ &2.輸出:n是合數,否則可能是素數\\ &3.重復k次:在 [2, n − 1]\\ &范圍內隨機選擇一個{\displaystyle x\gets \left({\tfrac {a}{n}}\right)} \\ &如果 x = 0 或 {\displaystyle a^{(n-1)/2}\not \equiv x{\pmod {n}}} \\ &然后返回合數\\ &否則返回可能是素數 \end{align*} \]

出錯的概率

所有歐拉-雅克比偽素數同時是費馬偽素數,這個判別公式對所有素數都成立,因而可以用於概率素性檢驗,他的可靠性是費馬素性檢驗的兩倍多

時間復雜度

\[O(k·log3 n) \]

3. Miller-Rabin素性檢驗(主要找課外知識)

想法

素性檢測首先利用了因數分解式,將冪次n-1降低為以2為階的各次冪,再利用中國剩余定理,推出強偽素數的滿足條件,在算法優化中,采用模平方算法降低復雜度,這也是該算法的優勢之一,大大提高了效率。

\[\begin{align*} &給定奇整數n\ge3和安全參數k\\ &寫n-1=2^st,其中t為奇整數\\ &1.隨機選取整數b,2\le b \le n-2\\ &2.計算r_0\equiv b^t(modn)\\ &3.\\&(1)如果r_0=1或r_0=n-1,則通過檢驗,回到第一步,重選b\\ &(2)否則有r_0\neq1以及r_0\neq n-1,計算r_1\equiv r_0^2(modn)\\ &以此類推,直到n-2為止,通過檢驗則輸出可能為素數,否則為合數 \end{align*} \]

出錯的概率

\[在k次檢測通過的情況下,n為合數的概率小於\frac{1}{4^k} \]

相比之下,這樣的出錯概率遙遙領先與費馬素性檢測和Solovay-Stassen素性檢測。

時間復雜度

模平方算法下

\[{\displaystyle O(k\log ^{3}n)} \]

轉載請注明出處:https://www.cnblogs.com/merk11/

總結感悟

大數素性檢測的發展,從最初的基於單一定理進行窮舉檢測,到特殊素數的檢測,再到一般素數的綜合檢測,一步一步從復雜到簡單,從特殊到一般;不僅如此,由於素數的重要性,人們更追求在更短時間內判定出素數,通過弱化某些條件或者尋找某些定理逆命題的可靠性,來概率性地判別素數,在概率性素數檢測發展中,Miller-Rabin最為著名,也是由於他能夠采用更加優良的模平方算法,大大降低了算法復雜度,使大數素數的判定速率有了質的飛躍。

數學家們至今仍然在素性檢測的山峰上攀登,在學習過程中,我尋找到了不少基於黎曼猜想的素性檢測,由於黎曼猜想並未完全被證明,這些素性檢測便仍然有很大的局限性。

各個素性檢測各有優勢,對待不同的檢測要求,大數范圍,選取的素性檢測也不同。素性檢測在對應的場景,經過人工的調試,能夠發揮更大的作用,比如概率性檢測的安全參數k便可以根據要求而改變。

轉載請注明出處:https://www.cnblogs.com/merk11/


免責聲明!

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



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