这篇论文主要研究素性测试的多项式时间算法,因为没有在网上找到合适的翻译版本,本人自行翻译了一个版本供学习使用。若有错误请指出。
英文原版的论文已打包上传 https://files.cnblogs.com/files/allegro-vivace/PrimesinP_original.zip算法
本文做者:Manindra Agrawal, Neeraj Kayal, Nitin Saxena.app
咱们将在文中给出一种素性检测的无条件的肯定性多项式时间算法。函数
关于素数的研究一般是数学中最重要的部分之一,尤为在数论中。因此研究素数的不一样性质是很是有趣的,尤为是那些能够有效地断定一个数是不是素数的那些性质。一样,这些有效的素性测试算法是很是实用的,例如许多加密协议须要用到大素数。工具
记PRIMES为全部素数构成的集合。素数的定义已经天然地给出了一种用于判断正整数\(n\)是否为素数的方法:枚举每个整数\(2\le m\le \sqrt n\),若是存在上述的任意一个\(m\)整除\(n\),则\(n\)为合数,不然\(n\)是素数。这种素性测试的方法在古希腊时期就已经被人们所知——它是埃拉托色尼筛选法(埃氏筛法)的一个特例,它可以获得小于\(n\)的全部素数。然而埃氏筛法的效率并不高,若要判断\(n\)是不是一个素数,所需的时间开销是\(\Omega(\sqrt n)\)的。一个高效的算法应该可以在多项式时间内(输入规模是\(\lceil \log n\rceil\))完成测试。费马小定理几乎直接给出了一种高效的测试算法:学习
费马小定理(Fermat's Little Theorem):测试
对于任意素数\(p\),若\(a\)不是\(p\)的倍数,则\(a^{p-1}\equiv 1({\rm mod\ } p)\)优化
对于给定的\(a\)和\(n\),经过反复平方计算出\(a^{n-1}\),能够高效地检测等式\(a^{n-1}\equiv 1({\rm mod\ }n)\)是否成立。然而,因为一些合数\(n\)和部分整数\(a\)也能知足等式\(a^{n-1}\equiv 1({\rm mod\ }n)\)(这些\(n\)称做卡迈克尔数,Carmichael numbers),所以费马素性检验不是一个正确的素性测试算法。尽管如此,费马小定理仍然是许多素性检验算法的基础。ui
在计算复杂性理论初步造成的1960年代,计算复杂度的概念基本肯定,而且在其中定义了许多复杂度类。在此时期,素性测试问题被深刻地研究。而且该问题属于co-NP类:要证实\(n\)不是素数,只需指出\(n\)的一个非平凡的因子。在1974年,V.R.Pratt发现素性测试问题也是属于NP类的。(所以该问题属于NP\(\cap\)co-NP).加密
1975年,Miller基于费马小定理和广义黎曼猜测获得了一种素性检验的肯定性多项式时间算法,不久后,他的算法被Rabin作出了一些修改,获得了一种无条件的、随机化的多项式时间算法。另外,Solovay和Strassen在1974年也提出了一种不一样的随机化多项式时间算法。spa
Solovay-Strassen素性测试:
对于一个素数\(n\)和知足\(1\le a\le N\)的整数\(a\),知足:
\[(\frac {a}{n})\equiv a^{\frac {n-1}2}({\rm mod \ n}) \]这里的\((\frac{\ }{})\)表明雅可比符号
译者注:雅可比符号定义详见这里
他们的算法在广义黎曼猜测的前提下也是肯定性的。以后,许多基于不一样性质的随机化多项式时间素性检验算法被提出。
1983年,Adleman, Pomerance和Rumely达成了一个重大突破:给出了一个时间复杂度为\((\log n)^{O(\log \log \log n)}\)的肯定性素性检验算法(在此以前,全部的肯定性算法都须要指数时间)。他们的算法归纳了Miller的思想,而且使用了Higher reciprocity laws(这个没有找到好的翻译,大概是互反律?)1986年,Goldwasser和Kilian提出了一种基于椭圆曲线的随机化算法,这种算法对于几乎全部输入的指望时间复杂度都是多项式级别(广泛猜测该算法对全部输入均可以在多项式时间内求解)。算法会生成简短的证书(certificate),经过这个证书能够简单地验证\(n\)是否为素数(在此以前全部的随机算法只能生成用于验证一个数\(n\)是否为合数的证书),基于他们的思想,Atkin提出了一种类似的算法。Adleman和Huang修改了Goldwasser-Kilian算法,获得一种对于全部输入的指望时间复杂度都在多项式级别的随机化算法。
这一系列研究的最终目标,固然是为了获得一种无条件的肯定性多项式时间素性检验算法。尽管一直以来这方面研究获得了重大的进展,这个最终目标仍然难以达成。在这篇论文中,咱们实现了这个目标。咱们给出了一个肯定性的,时间复杂度为\(O^{\sim}(\log^{15/2} n)\)的素性检验算法。一个启发性的结果是,咱们的算法效果确实更好:假设苏菲·姬曼(Sophie Germain)的素数密度猜测成立,算法只需
\(O^{\sim}(\log ^6 n)\)步就可完成。
苏菲·姬曼(Sophie Germain)素数密度猜测:
若\(p\)是素数,则\(2p+1\)也是素数。
咱们的算法是费马小定理在有限域多项式环上的推广,值得注意的是,对它正确性的证实只须要简单的代数工具(关于“知足\(p-1\)有大素数因子的素数\(p\)的密度”的筛法理论结果除外——实际上若是只证实一个更松的\(O^{\sim}(\log ^{12/2}n)\)的复杂度上界,就能够不须要筛法理论结果)。相比之下,以前的算法,如Adleman-Pomerance-Rumely算法,Goldwasser-Kilian算法,Atkin算法的正确性证实要复杂得多。
在文章第二部分,咱们总结了算法背后的基本思想;第三部分,咱们规定了以后使用的记号;第四部分描述算法并给出了正确性证实;第五部分,分析算法时间复杂度的界限;第六部分探讨进一步优化复杂度的途径。
咱们的素数判别法基于如下的素数恒等式,这个恒等式能够看做是费马小定理的推广,是[AB]种随机多项式时间算法的基础。
引理2.1:设\(a\in {\mathbb Z},n\in {\mathbb N},n\ge 2\)且\((a,n)=1\),则\(n\)是素数当且仅当
\[\begin{equation}(X+a)^n\equiv X^n+a({\rm mod\ }n) \tag {1} \end{equation} \]
证实:对于\(0<i<n\),在 \(((X+a)^n-(X^n+a))\)中, \(x^i\)项的系数是 \(\left(\begin{array}{c}n\\i\end{array}\right)a^{n-i}\).
假设\(n\)为素数,则\(\left(\begin{array}{c}n\\i\end{array}\right)\equiv 0({\rm mod}\ n)\),因而全部系数都为\(0\)
若\(n\)为合数,考察\(n\)的一个素因子\(q\),且设\(q^k||n\)。因为\((a,n)=1\),则\((a,q)=1\),因而\(a^{n-q}\)与\(q\)互素,且\(q^k\)不整除\(\left(\begin{array}{c}n\\q\end{array}\right)\).
因而\(q^k\not | \left(\begin{array}{c}n\\q\end{array}\right)a^{n-q}\),\(n\not | \left(\begin{array}{c}n\\q\end{array}\right)a^{n-q}\),即\(\left(\begin{array}{c}n\\q\end{array}\right)a^{n-q}\ne0\)在模\(n\)意义下成立。所以\(((X+a)^n-(X^n+a))\)在模\(n\)意义下不等于\(0\),因而在模\(n\)意义下\((X+a)^n\ne X^n+a\),证毕。
引理2.1给出了一个简单的素性检验方法:对于给定的输入\(n\),任选一个\(a\)而后计算同余式(1)是否成立。然而在最坏状况下,同余式左边须要计算\(n\)个系数的值,所需时间开销\(\Omega(n)\).减小多项式项数的一个简单方法是在(1)的两侧同时模去形为\(X^r-1\)的多项式,\(r\)选择一个合适的较小数。也就是说,检验如下等式是否成立
由引理2.1,对于任意\(r,a\),全部素数\(n\)都知足同余式(2).问题在于,对于\(r\)和\(a\),一些合数\(n\)也可能知足方程(事实上确实是这样)。但咱们能够作出以下的修订:对于适当选择的\(r\),若是(2)对某些\(a\)成立,则\(n\)一定为素数的幂。\(a\)和\(r\)的数量能够由关于\(\log n\)的对数多项式来限定,所以咱们获得一个素性测试的肯定性多项式时间算法。
P类是指全部能够由一个肯定型图灵机在多项式时间内解决的问题构成的集合;关于NP类,co-NP类的定义见[Lee].
\(Z_n\)表明模\(n\)整数环,\(F_p\)表示具备\(p\)个元素的有限域,其中\(p\)是素数。咱们先回忆一个事实:若是\(p\)是素数,\(h(X)\)是\(F_p\)上的\(d\)次不可约多项式,则\(F_p[X]/(h(X))\)是\(p^d\)阶的有限域,咱们使用记号\(f(X)\equiv g(X)({\rm mod\ }h(X,n))\)来表示在环\(Z_n[X]/(h(X))\)中\(f(X)=g(X)\).咱们用符号\(O^{\sim }(t(n))\)来表示\(O(t(n)\cdot {\rm poly}(\log t(n)))\),其中\(t(n)\)是关于\(n\)的任意函数。例如:
\(\log\)表明以\(2\)为底的对数,\(\ln\)表示以\(e\)为底的天然对数。
\({\mathbb N,Z}\)分别表示天然数集和整数集。对于给定的\(r\in {\mathbb N},a\in {\mathbb Z},(a,r)=1\),\(a\)模\(r\)的阶为知足\(a^k\equiv 1({\rm mod} \ r)\)的最小数\(k\),咱们将其记做\(o_r(a)\).
对于\(r\in {\mathbb N},\phi(r)\)为欧拉函数,\(\phi(r)\)的值表示小于\(r\)而且与\(r\)互素的数的数量。易知\(\forall a,(a,r)=1\),有\(o_r(a)|\phi(r)\).
咱们须要如下的简单事实:
引理3.1:以\(LCM(m)\)表示前\(m\)个数的最小公倍数,当\(m\ge 7\)时,\(LCM(m)\ge 2^m\).
伪码描述:
输入:大于1的整数\(n\)
\(if (n=a^b\ for\ a\in {\mathbb N}\ and b>1) ,\ output {\rm\ COMPOSITE}.\)
\(Find\ the\ smallest\ r\ such\ that\ o_r(n)>\log^2n).\)
\(if(1<(a,n)<n\ for\ some\ a\le r),\ output\ {\rm COMPOSITE.}\)
\(if(n\le r),\ output\ {\rm PRIME}\).
\(for\ a=1\ to \lfloor\sqrt{\phi(r)}\log n\rfloor\ do:\\ \quad \quad if((X+a)^n\ne X^n+a({\rm mod\ }X^r-1,n)),\ output\ {\rm COMPOSITE;}\)
\(output \ {\rm PRIME.}\)
素性断定算法
定理4.1:上述算法返回
PRIME
,当且仅当\(n\)为素数。
咱们经过一系列的引理来证实这个定理。
引理4.2:若是\(n\)是素数,算法返回
PRIME
.(充分性)
证实:若\(n\)为素数,则第1,3步不会返回COMPOSITE
.由引理2.1,for
循环也不会返回COMPOSITE
.所以该算法将会在第4步或第6步断定\(n\)是一个素数,证毕。
要证实以上引理的逆命题(必要性)则相对费劲一些。若是算法在第4步返回了PRIME
,则\(n\)必定是素数,不然第3步就会找到\(n\)的一个非平凡的因子,所以咱们只须要讨论算法在第6步返回PRIME
的状况。
算法具备两个主要步骤(第2步和第5步):第2步找到一个合适的\(r\),第5步对于某些\(a\),验证等式(2)是否成立。首先咱们要找到这个合适的\(r\)的上界。
引理4.3:\(\exists r \le \max\{3,\lceil \log^5 n\rceil\}\),使得\(o_r(n)>\log^2 n.\)
证实:
\(n=2\)时,令\(r=3\),有:\(o_3(2)=2>\log^2 2=1\),知足条件。
\(n>2\)时,\(\lceil \log ^5n\rceil>10\).设\(r_1,r_2,\cdots,r_t\)是全部知足\(o_{r_i}\le \log ^2n\)或\(r_i|n\)的数,则全部这样的\(r_i\)一定可以整除如下乘积
由引理3.1,前\(\lceil\log^5n\rceil\)个数的公倍数至少为\(2^{\lceil\log^5n\rceil}\),而\(r_1,r_2,\cdots,r_t\)的最小公倍数小于\(n\cdot\prod_{i=1}^{\lfloor \log^2n\rfloor}(n^i-1)\),故\(\exists s\le \lceil\log^5n\rceil\)使得\(s\notin \{r_1,r_2,\cdots,r_t\}.\)
若\((s,n)=1\),则\(o_s(n)>\log^2n\),\(s\)即为所求
若\((s,n)\ne 1\),由于\(s\)不整除\(n\),且\((s,n)\in \{r_1,r_2,\cdots,r_t\}\).\(r=\frac s{(s,n)}\notin \{r_1,r_2,\cdots,r_t\}\),因此\(o_r(n)>\log ^2n\).
因为\(o_r(n)>1\),则必存在\(n\)的一个素因子\(p\),使得\(o_r(p)>1\).咱们有\(p>r\),不然在第3,第4步就能够断定\(n\)是不是素数。由于\((r,n)=1\)(如若否则,在第三步或第四步就能够断定\(n\)是不是素数),所以\(p,n\in Z_r^*\)。
令\(l=\lfloor\sqrt{\phi(r)}\log n\rfloor\).算法第五步,验证\(l\)个方程。由于算法在此步不输出COMPOSITE
,因此有:
对于任意的\(a,0\le a\le l\)(平凡地,\(a=0\)显然成立),可知:
对于\(\forall a, 0\le a\le l\),由引理2.1,咱们有:
对于\(\forall a, 0\le a\le l\),由方程(3)和(4),咱们有:
对于\(\forall a, 0\le a\le l\),在上面的方程中,\(n\)和\(n/p\)的性质相似于素数\(p\),咱们对于以上的等式性质给出一个定义:
定义4.4:对于多项式\(f(X)\)和整数\(m\in {\mathbb N}\),若是:
\[[f(X)]^m\equiv f(X^m)({\rm mod \ }X^r-1,p) \]则咱们称\(m\)是\(f(X)\)的自省数。
由方程(5)和(4),咱们能够看出,当\(0\le a\le l\)时,\(p\)和\(n/p\)都是\(X+a\)的自省数。
接下来的引理证实了自省数在乘法下封闭。
引理4.5:若是\(m\)和\(m'\)是\(f(X)\)的自省数,则\(m\cdot m'\)也是\(f(X)\)的自省数。
证实:因为\(m\)是\(f(X)\)的自省数,咱们有:
因为\(m'\)也是\(f(X)\)的自省数,咱们有:
又由于\(X^r-1\)整除\(X^{m\cdot r}-1\),则上式
证毕。
引理4.6:对于数\(m\),以\(m\)为自省数的多项式集合对乘法封闭。即:若是\(m\)是\(f(X)\)和\(g(X)\)的自省数,那么\(m\)也是\(f(X)\cdot g(X)\)的自省数。
证实:
以上两个引理说明:对于集合\(I=\{(n/p)^i\cdot p^j|i,j\ge 0 \}\)中的任意一个数,它都是集合\(P=\{\prod_{a=0}^l(X+a)^{e_a}|e_a\ge 0 \}\)中任意一个多项式的自省数。在此基础上咱们定义两个群,它们将在后面的证实中起到重要的做用。
第一个群是集合\(I\)中的数模\(r\)的余数构成的群,即:
因为\((n,r)=(p,r)=1\),因此它是\(Z_r^*\)的子群。设\(|G|=t\),\(G\)由\(n\)和\(p\)模\(r\)生成,由于\(o_r(n)>\log ^2n\),因此\(t>log^2n\).
要定义第二个群,咱们须要一些关于有限域上分圆多项式的基础事实。令\(Q_r(X)\)为域\(F_p\)上的\(r\)次分圆多项式。多项式\(Q_r(X)\)整除\(X^r-1\),而且\(Q_r(X)\)能够分解为次数为\(o_r(p)\)的不可约多项式。令\(h(X)\)是一个不可约因式,由于\(o_r(p>1)\),因此\(h(X)\)的次数大于1。第二个群是\(P\)中多项式模\(h(X)\)和\(p\)的余式构成的集合。设这个群为 \({\mathcal G}=\langle X({\rm mod\ }h(X,p)) ,X+1({\rm mod\ }h(X,p)),\cdots,X+l({\rm mod\ }h(X,p))\rangle\).令\(F=F_p[X]/(h(X))\) ,则\(\mathcal G\)是乘法群\(F\)的一个子群。
如下引理给出了群\(\mathcal G\)的阶的一个下界,它由Hendrik Lenstra Jr.证实,并对咱们早期研究中给出的算法的下界做了些许改进。
引理4.7(Hendrik Lenstra Jr.引理)
\[|{\mathcal G}|\ge\left(\begin{array}{c}t+l\\t-1\end{array}\right) \]做者注:Macaj也曾独立地证实了这个引理。
证实:首先咱们注意到\(h(X)\)是分圆多项式\(Q_r(X)\)的因子,因此在\(F\)中\(X\)是它的一个\(r\)次本原单位根。接下来咱们证实,任意两个次数小于\(t\)的多项式能够映射到\(\mathcal G\)中的不一样元素。设\(f(X)\)和\(g(X)\)是\(P\)中的两个多项式,且\(\deg f(X)<t,\deg g(X)<t\).设在\(F\)中\(f(X)=g(X)\),即\(f(X)\equiv g(X)({\rm mod}\ h(X),p)\).再设\(m\in I\),则
因为\(m\)是\(f(X),g(X)\)的自省数,且\(h(X)\)整除\(X^r-1\),咱们获得:
这意味着对于\(\forall m\in G\),\(X^m\)是多项式\(Q(Y)=f(Y)-g(Y)\)的根。因为\((m,r)=1\),\(G\)是\(Z_r^*\)的子群,任意一个如上的\(X^m\)都是\(r\)次本原单位根,所以多项式\(Q(Y)\)在\(F\)中一共有\(|G|=t\)个不一样的根。可是由于\(f\)和\(g\)的次数都小于\(t\),\(Q(Y)\)的次数小于\(t\),从而推出矛盾。所以,\(f(X)\not\equiv g(X)({\rm mod}\ h(X),p)\).
注意到对于\(F_p\)中的\(1\le i\ne j\le l\),\(i\ne j\).且\(l=\lfloor \sqrt{\phi(r)}\log n\rfloor <\sqrt r\log n<r<p\).因此在\(F\)中\(X,X+1,X+2,\cdots,X+l\)两两不等。同时,由于\(h\)次数大于1,\(X+a\ne 0\)对于\(F\)中的任意一个\(a,0\le a\le l\)都成立,因此\(\mathcal G\)中至少有\(l+1\)个不一样的一次多项式。所以\(\mathcal G\)中至少存在\(\left(\begin{array}{c}t+l\\t-1\end{array}\right)\)个次数小于\(t\)的不一样的多项式。证毕。
若\(n\)不是素数\(p\)的方幂,那么咱们能够给出\(\mathcal G\)的阶的一个上界。
引理4.8:若是\(n\)不是素数\(p\)的方幂,那么\(|{\mathcal G}|\le n^{\sqrt t}\)。
证实:考虑如下\(I\)的子集
若是\(n\)不是\(p\)的方幂,那么集合\(\hat I\)中有\((\lfloor \sqrt t\rfloor )^2>t\)个不一样的数。又由于\(|G|=t\),\(\hat I\)中至少存在两个数在模\(r\)意义下相等。不妨设这两个数分别是\(m_1,m_2\),且\(m_1>m_2\).因而咱们有:
设\(f(X)\in P\).那么:
这意味着在域\(F\)中
所以,\(f(X)\in {\mathcal G}\)是域\(F\)中的多项式\(Q'(Y)=Y^{m_1}-Y^{m_2}\)的根。因为\(f(X)\)具备任意性,多项式\(Q'(Y)\)在域\(F\)中至少具备\(|\mathcal G|\)个互不相等的根。又
也就证实了\(|{\mathcal G}|\le n^{\sqrt t}\),证毕。
有了以上的准备,咱们如今能够证实算法的正确性了。
引理4.9:若是算法返回
PRIME
,那么\(n\)是素数。(必要性)
证实:假设算法返回PRIME
,由引理4.7,对于\(t=|G|\)和\(l=\lfloor \sqrt{\phi (r)}\log n\rfloor\),有
由引理4.8,若\(n\)不是素数\(p\)的方幂,则${|\mathcal G|}\le n^{\sqrt t} $.所以由上述不等式,可知:
若\(k>1\),则算法在第一步返回COMPOSITE
,所以这里的状况只能是\(n=p\)。这就完成了对定理4.1的证实。
咱们计算复杂度基于如下事实:两个长为\(m\)比特的数的加法,乘法,出发运算时间复杂度是\(O^{\sim}(m)\).相似的,两个次数为\(d\)、系数至多为\(m\)比特的多项式的运算的时间复杂度是\(O^{\sim}(d\cdot m)\).
定理5.1:算法的渐进时间复杂度是\(O^{\sim }(\log ^{21/2}n)\).
证实:算法的第一步渐进时间复杂度为\(O^{\sim }(\log ^{3}n)\).
在算法的第二步,咱们要找一个知足\(o_r(n)>\log ^2 n\)的\(r\),这能够经过验证对于每个\(r,\forall k,1\le k\le \log ^2 n\),是否知足$n^k\not\equiv1({\rm mod}\ r) \(.对于一个固定的\)r\(,计算\)n^k({\rm mod\ }r)\(须要做至多\)O(\log ^2 n)\(次模\)r\(乘法,所需时间复杂度为\)O(\log ^2n\log r)\(.由引理4.3咱们知道只需检验\)O(\log ^5 n)\(个不一样的\)r\(的值。所以第二步的时间复杂度为\)O^{\sim }(\log ^7n)$.
算法第三步包括计算\(r\)对数的最大公因数。求最大公因数的时间复杂度是\(O(\log n)\),所以这一部的时间复杂度是\(O(r\log n)=O(\log ^6n).\)
算法第四步复杂度仅为\(O(\log n)\).
算法第五步,咱们须要验证\(\lfloor \sqrt{\phi(r)}\log n\rfloor\)个方程。验证每一个方程须要\(O(\log n)\)次次数为\(r\),系数大小为\(O(\log n)\)的多项式乘法。因此验证每一个方程须要的时间开销为\(O^{\sim }(r\log ^2n)\)。所以第五步的总时间复杂度为
这个时间复杂度已经涵盖了其它步骤的复杂度,所以算法总体的时间复杂度为\(O^{\sim}(\log^{21/2}n).\)证毕。
经过改进对整数\(r\)的估计精度(由引理4.3),算法的时间复杂度还能够进一步优化。对于最好的状况,即\(r=O(\log^2n)\)时,总的时间复杂度为\(O^{\sim}(\log ^6n)\).事实上,有两个猜测能够支持\(r=O(\log^2n)\)的可能性。(如下的\(\ln\)以天然对数的底数\(e\)为底)
Artin猜测:
对于给定的\(n\in {\mathbb N}\),且\(n\)不是彻底平方数,则知足\(o_q(n)=q-1\)且\(q\le m\)的素数\(q\)的个数渐进为\(A(n)\cdot \frac m{\ln m}\).这里的\(A(n)\)称为Artin常数,\(A(n)>0.35\).
苏菲·姬曼(Sophie Germain)素数密度猜测:
知足\(2q+1\)仍为素数的素数\(q\le m\)的个数渐进为\(\frac {2C_2m}{\ln ^2m}\).这里的\(C_2\)是孪生素数常数,其值约为0.66。具备上述性质的素数\(q\)称为Sophie Germain素数。
令\(m=O(\log ^2n)\),若Artin猜测成立,马上可得存在知足要求的\(r=O(\log^2n)\)。在引用文献[GM],[GMM],[HB]中,它们已经对Artin猜测的证实作了一些工做,并且,在广义黎曼猜测的基础上,Artin猜测是成立的。
若Sophie Germain猜测成立,咱们可得\(r=O^{\sim}(\log ^2n)\):
由Sophie Germain素数密度猜测,对于一个合适的常数\(c\),在\(8\log ^n\)和\(c\log^2n(\log \log n)^2\)之间必定存在至少\(\log ^2n\)个Sophie Germain素数。对任意一个这样的素数\(q\),一定知足如下两条性质其一:
①:\(o_q(n)\le 2\)
②:\(o_q(n)\ge (q-1)/2\)
知足①的任意素数\(q\)必整除\(n^2-1\),由此可知这样的\(q\)的个数的上界为\(O(\log n)\).这指出了必定存在一个素数\(r=O^{\sim }(\log ^n)\)使得\(o_r(n)>\log ^2 n\).这样的\(r\)就使得咱们的算法复杂度变为\(O^{\sim}(\log ^6n)\).
对Sophie Germain素数密度猜测的证实也已有所进展。记\(P(m)\)为\(m\)的最大素因子,Goldfeld[Gol]已经证实了知足\(P(q-1)>q^{\frac 12+c},c\approx \frac 1{12}\)的素数\(q\)以正密度出现。基于以上基础,Fouvry证实了如下结果
引理5.2:
\[\exists c>0,n_0\\ {\rm s.t.\quad } \forall x\ge n_0:\\|\{q|q是素数且q\le x\ 且 \ P(q-1)>q^{\frac23} \}|\ge c\frac x{\ln x} \]
以上引理中的指数精度还能够提升到\(0.6683\).使用以上引理咱们能够优化算法的时间复杂度。
定理5.3:算法的时间复杂度是\(O^{\sim}(\log ^{15/2}n)\).
如以上叙述所说,因为知足\(P(q-1)>q^{2/3}\)的素数\(q\)密度较高,以致于在算法的第二部可以找到知足\(o_r(n)>\log ^2n\)的\(r=O(\log ^3n)\).这就将咱们的算法复杂度下降到了\(O^{\sim}(\log^{15/2}n)\).证毕。
最近,Hendrik Lenstra和Carl Pomerance对咱们的算法作出了改进,能够证实修改版的算法复杂度为\(O^{\sim}(\log^6n)\).
咱们的算法第五步循环须要进行$\lfloor \sqrt{\phi(r)}\log n\rfloor \(次,以保证群\)\mathcal G\(的阶足够大。若是咱们能够证实由较少的\)(X+a)$也能生成一样结束的群,则循环的迭代次数能够减小。这是极有可能的。
若如下猜测成立,算法的复杂度还能够进一步优化至\(O^{\sim}(\log ^3n)\)(引用文献[BP]提出了此猜测,并在[KS]中验证了\(r\le 100,n\le 10^{10}\)的状况)。
猜测6.1:对素数\(r\),若是\(r\)不整除\(n\)且知足
\[(X-1)^n\equiv X^-1({\rm mod\ }X^r-1,n).\tag6 \]则\(n\)要么是一个素数,要么\(n^2\equiv 1({\rm mod \ }r)\).
若是以上猜测成立,咱们能够略微修改一下算法,首先寻找不整除\(n^2-1\)的整数\(r\),这样的\(r\)必可在\([2,4\log n]\)区间内找到。这是由于小于\(x\)的素数的乘积不小于\(e^x\)(见引用文献[Apo]).而后咱们须要验证同余式(6)是否成立,其时间复杂度为\(O^{\sim}(r\log^2n)\).这使得算法的总体时间复杂度下降到了\(O^{\sim}(\log ^3 n)\).
最近,Hendrik Lenstra和Carl Pomerance[LP2]认为上述猜测是错误的,但尽管如此,这个猜测的一些变体仍然多是正确的。(例如强行令\(r>\log n\)的状况).
咱们感谢Hendrik Lenstra Jr.容许咱们使用他的一些发现来改进群\(\mathcal G\)的阶的下界,这使得算法的证实过程变得简单(在早期版本的证实中须要用到引理5.2给出的密度界限),而且改善了时间复杂度!
咱们也很是感谢Adam Kalai, Amit Sahai和Madhu Sudan容许咱们在引理4.8中引用了他们的证实。这使得对群\(\mathcal G\)的阶的上界和下界的证实方法相似。(它们都经过一个域上多项式的根的数量来进行证实)
感谢Somenath Biswas, Rajat Bhattacharjee, Jaikumar Radhakrishnan和V.Vinay的许多有用的讨论。
感谢Erich Bach, Abhijit Das, G.Garman, Roger Heath-Brown, Pieter Moree, Richard Pinch和Carl Pomerance为咱们提供了有用的参考文献。
自从咱们的预印版本发布以来,许多研究人员指出了咱们论文中存在的各类各样的疏忽之处,咱们感谢全部这些研究人员。咱们尽可能在论文中采纳了他们的建议,对于那些没有采用的建议,咱们表示歉意。
最终,咱们感谢那些提出了有用的建议和相关研究的匿名引用做者。
(译者注:这部分参考文献请看原文pdf第13页到第14页)