大數素性檢測

2022-09-10 11:27:11 字數 4727 閱讀 3547

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

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

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

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

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

\]想法

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

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

時間複雜度

\[o(2^)

\]2.lucas–lehmer素性檢驗(用於梅森數的檢驗)

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

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

\[\begin

&1.定義序列 s_,i>0\\

&2.s_i=4,i=0;\\

&3.s_i=s_^2-2,i>0\\

&4.那麼m_n為素數當且僅當s_ \equiv0(modm_n)\\

&5.否則m_p為合數\\

&6.時間複雜度o(n^)

\end

\]想法

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

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

\[}=(2+})(2-})=1}

\]用於證明每個si都滿足

\[=\omega ^}+}^}}

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

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

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

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

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

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

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

\[(x+a)^n\equiv(x^n+a)(mod x^,n)

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

演算法操作:

\[\begin

&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 到 }\log(n)\scriptstyle \rfloor }\scriptstyle \lfloor \scriptstyle }\log(n)\scriptstyle \rfloor 的所有數,

如果 (x+a)n≠ xn+a (mod xr − 1,n), 輸出合數。\\

&7.輸出素數。

\end

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

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

\[如果p是素數,,那麼a^}\equiv 1}

\]但是由於其逆定理並不正確,對於卡麥可數即滿足費馬小定理的逆定理但是不為素數的數,雖然卡麥可數很少,在1~100000000範圍內的整數中,只有255個卡麥可數,但是已經使他的效果落後於miller-rabinsolovay-strassen素性檢驗。

\[\begin

&1.輸入:n\ge3;k:引數之一來決定檢驗需要進行的次數。\\

&2.輸出:當n是合數時,否則可能是素數:\\

&3.重複k次:\\

&在[2, n − 2]範圍內隨機選取a\\

&如果a^ mod n ≠ 1那麼返回合數\\

&返回可能是素數

\end

\]出錯的概率

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

\[在重複k次成立的情況下,n為合數的可能性小於\frac

\]突破

2023年,我國物流工人提出了卡麥可數判別準則

\[\begin

&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

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

時間複雜度

\[o(k×log3n)

\]2.尤拉-雅克比偽素數和solovay-stassen素性檢驗(主要找課外知識)

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

尤拉偽素數:

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

\[b^}\equiv(\frac)(modn)

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

solovay-stassen演算法:

\[\begin

&1.輸入:n,乙個值以測試素性

k,其確定測試的準確性的引數\\

&2.輸出:n是合數,否則可能是素數\\

&3.重複k次:在 [2, n − 1]\\

&範圍內隨機選擇乙個}\right)} \\

&如果 x = 0 或 \not \equiv x}} \\

&然後返回合數\\

&否則返回可能是素數

\end

\]出錯的概率

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

時間複雜度

\[o(k·log3 n)

\]3. miller-rabin素性檢驗(主要找課外知識)

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

\[\begin

&給定奇整數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

\]出錯的概率

\[在k次檢測通過的情況下,n為合數的概率小於\frac

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

時間複雜度

模平方演算法下

\[n)}

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

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

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

生成大素數 python實現 ,包含素性檢測

檢測大整數是否是素數,如果是素數,就返回true,否則返回false def rabin miller num s num 1 t 0 while s 2 0 s s 2 t 1 for trials in range 5 a random.randrange 2,num 1 v pow a,s,n...

Miller Rabin素性測試

博主鏈結 隨機素數測試 偽素數原理 call bool res miller n 快速測試n是否滿 足素數的 必要 條件,出錯概率極低 對於任意奇數n 2和正整數s,演算法出錯概率 2 s include include define ll long long int define met a me...

MR素性探測

mr演算法全稱是miller rabin測試,是乙個非確定的演算法,用於判斷乙個數是否是質數.雖然是乙個非確定的演算法,但是只要巧妙地選取引數,在一定範圍內就是乙個確定性的演算法.前置條件 費馬小定理1 a p 1 mod p miller和rabin兩個人的工作讓fermat素性測試邁出了革命性的...