AKS質數測試:修订间差异
→首段: 調整格式、排版 |
→相關頁面: 調整格式、排版 |
||
第119行: | 第119行: | ||
# '''输出'''''True'' |
# '''输出'''''True'' |
||
== |
==註釋== |
||
{{Reflist|2}} |
{{Reflist|2}} |
||
==延伸閱讀== |
|||
{{refbegin}} |
|||
* {{cite book | last=Dietzfelbinger | first=Martin | title=Primality testing in polynomial time. From randomized algorithms to ``PRIMES is in P | series=Lecture Notes in Computer Science | volume=3000 | location=Berlin | publisher=[[Springer-Verlag]] | year=2004 | isbn=3-540-40344-2 | zbl=1058.11070 }} |
|||
{{refend}} |
|||
== 外部連結 == |
== 外部連結 == |
2017年11月17日 (五) 03:07的版本
AKS質數測試(又被稱為 Agrawal–Kayal–Saxena質數測試 和 Cyclotomic AKS test)是一個決定型質數測試演算法 ,由三個來自印度坎普爾理工學院的計算機科學家,Manindra Agrawal、Neeraj Kayal和Nitin Saxena,在2002年8月6日發表於一篇題為質數屬於P的論文。[1]作者們因此獲得了許多獎項,包含了2006年的哥德爾獎和2006年的Fulkerson Prize。這個演算法可以在多項式時間之內,決定一個給定整數是質數或者合數。
重要性
AKS最關鍵的重要性在於它是第一個被發表的一般的、多項式的、確定性的和無仰賴的質數判定算法。先前的算法至多達到了其中三點,但從未達到全部四個。
- AKS算法可以被用於檢測任何一般的給定數字是否為質數。很多已知的高速判定算法只適用於滿足特定條件的質數。例如,卢卡斯-莱默检验法僅對梅森質數適用,而Pépin測試僅對費馬數適用。
- 算法的最長運行時間可以被表為一個目標數字長度的多項式。ECPP和APR能夠判斷一個給定數字是否為質數,但無法對所有輸入給出多項式時間範圍。
- 算法可以確定性地判斷一個給定數字是否為質數。隨機測試演算法,例如米勒-拉宾检验和Baillie–PSW,可以在多項式時間內對給定數字進行校驗,但只能給出概率性的結果。
- AKS算法並未“仰賴”任何未證明猜想。一個反例是确定性米勒检验:該算法可以在多項式時間內對所有輸入給出確定性結果,但其正確性卻基於尚未被證明的廣義黎曼猜想。
概念
AKS 質數測試主要是基於以下定理:整數n (≥ 2)是質數,若且唯若
( | )
這個同餘多項式對所有與n互質的整數a均成立。 這個定理是費馬小定理的一般化,並且可以簡單的使用二項式定理跟二項式係數的這個特徵:
- ,對任何 ,若且唯若 n 是質數
來證明出此定理。
雖然說關係式 (1) 基本上構成了整個質數測試,但是驗證花費的時間卻是指數時間。因此,為了減少計算複雜度, AKS改為使用以下的同餘多項式:
( | )
這個多項式與存在多項式 f 與 g,令:
( | )
意義是等同的。
這個同餘式可以在多項式時間之內檢查完畢。這裡我們要注意所有的質數必定滿足此條件式 (令 g = 0 則 (3) 等於 (1),因此符合 n 必定是質數)。 然而,有一些合數也會滿足這個條件式。有關AKS正確性的證明包含了推導出存在一個夠小的r以及一個夠小的整數集合A,令如果此同餘式對所有A裡面的整數都滿足,則n必定為質數。
歷史以及運算時間
在上文引用的論文的第一版本中,作者們證明了算法的漸近時間為O。換言之,算法使用少於n的二進制數字長度的十二次方。但是,論文證明的時間上界卻過於寬鬆;事實上,一個被普遍相信的關於索菲熱爾曼質數分佈的假設如果為真,則會立即將最壞情況減至O。
在這一發現後的幾個月中,新的變體陸續出現(Lenstra 2002, Pomerance 2002, Berrizbeitia 2003, Cheng 2003, Bernstein 2003a/b, Lenstra和Pomerance 2003)並依次提高了算法的速度(以改進幅度為序)。由於這些變體的出現,Crandall和Papadopoulos在其科學論文“AKS-類質數測試的實現”(2003年三月發表)中將其稱為算法的“AKS-類”。
出於對這些變體和其他回复的回應,論文“質數屬於P”稍後被進行了更新,新版本包括了一個AKS算法的正規公式化表述和其正確性證明。(這一版本在Annals of Mathematics上發表。)雖然基本思想沒有變化,r卻被採用了新方法進行選擇,而正確性證明也變得更加緊緻有序。與舊證明依賴於許多不同的方法不同,新版本幾乎只依賴於有限域上的分圓多項式的特徵。新版本同時也優化了時間複雜度的邊界到O。通過篩法獲得的其他結果可以將其進一步簡化到O。
在2005年,Carl Pomerance和H. W. Lenstra, Jr.展示了一個AKS的變體,可以在O(log6(n))次操作內完成測試(n是被測試數)。對於原算法的O(log12(n))邊界而言,這是一個顯著的改進。[2]
演算法
整個演算法的操作如下:[1]
- 輸入:整數 n > 1
- 若存在整數a > 0 且b > 1 ,令 n = ab ;則輸出合數
- 找出最小的 r 令 ordr(n) > log2(n).
- 若 對某些a ≤ r,1 < gcd(a,n) < n,輸出合數。(gcd是指最大公因數)。
- 若 n ≤ r, 輸出質數。
- 對 a = 1 到 的所有數,
- 如果 (X+a)n≠ Xn+a (mod Xr − 1,n), 輸出合數。
- 輸出 質數。
這裡的 ordr(n)是n mod r的阶。 另外,這裡的log 代表以二為底的對數,則是r的歐拉函數。
下面說明若n是個質數,那麼算法總是會返回質數:由於n是質數,步驟1和3永遠不會返回合數。步驟5也不會返回合數,因為(2)對所有質數n為真。因此,算法一定會在步驟4或6返回質數。
對應地,如果n是合數,那麼算法一定返回合數:如果算法返回質數,那麼則一定是從步驟4或6返回。對於前者,因為n ≤ r, n必然有因子a ≤ r符合1 < gcd(a,n) < n,因此會返回合數。剩餘的可能性就是步驟6,在文章[1]中,這種情況被證明不會發生,因為在步驟5中檢驗的多個等式可以確保輸出一定是合數。
具体实现
欧几里得算法求最大公约数:
- 如果,
- 输出
- 输出
判定n(奇数)是否为平方数:
- 如果,
- 输出False
- 计算
- 计算
- 令
- 对于,按如下递推式计算与
- 计算
- 如果,
- 输出True
- 如果,
- 输出True
- 输出False
判定n(奇数)是否为d(奇数)次方数:
- 计算
- 计算
- 令
- 对于,按如下递推式计算与
- 计算
- 如果,
- 输出True
- 输出False
判定n是否为素数:
- 如果,
- 输出False
- 如果,
- 输出False
- 对于,以步长为2(即对所有奇数d)计算
- 如果
- 输出False
- 如果
- 计算
- 对于,计算
- 如果
- 令,重新检测(回到5.)
- 如果
- 对于,计算
- 如果
- 输出False
- 如果
- 如果
- 输出True
- 令
- 对于,计算
- 如果
- 令
- 如果
- 对于,计算
- 如果
- 输出False
- 如果
- 输出True
註釋
- ^ 1.0 1.1 1.2 Manindra Agrawal, Neeraj Kayal, Nitin Saxena, "PRIMES is in P", Annals of Mathematics 160 (2004), no. 2, pp. 781–793.
- ^ H. W. Lenstra, Jr. and Carl Pomerance, "Primality Testing with Gaussian Periods", preliminary version July 20, 2005.
延伸閱讀
- Dietzfelbinger, Martin. Primality testing in polynomial time. From randomized algorithms to ``PRIMES is in P. Lecture Notes in Computer Science 3000. Berlin: Springer-Verlag. 2004. ISBN 3-540-40344-2. Zbl 1058.11070.
外部連結
- 埃里克·韦斯坦因. AKS Primality Test. MathWorld.
- R. Crandall, Apple ACG, and J. Papadopoulos (March 18, 2003): On the implementation of AKS-class primality tests (PDF)
- Article by Borneman, containing photos and information about the three Indian scientists (PDF)
- Andrew Granville: It is easy to determine whether a given integer is prime
- The Prime Facts: From Euclid to AKS, by Scott Aaronson (PDF)
- The PRIMES is in P little FAQ by Anton Stiglic
- 2006 Gödel Prize Citation
- 2006 Fulkerson Prize Citation
- [1]
- The AKS "PRIMES in P" Algorithm Resource