论文翻译:《PRIMES is in P》——素性测试的确定性多项式时间算法研究

Posted allegro-vivace

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文翻译:《PRIMES is in P》——素性测试的确定性多项式时间算法研究相关的知识,希望对你有一定的参考价值。

这篇论文主要研究素性测试的多项式时间算法,由于没有在网上找到合适的翻译版本,本人自行翻译了一个版本供学习使用。如有错误请指出。
英文原版的论文已打包上传 https://files.cnblogs.com/files/allegro-vivace/PrimesinP_original.zip

PRIMES is in P

本文作者:Manindra Agrawal, Neeraj Kayal, Nitin Saxena.

概要

我们将在文中给出一种素性检测的无条件的确定性多项式时间算法。

第一部分:介绍

关于素数的研究通常是数学中最重要的部分之一,尤其在数论中。所以研究素数的不同性质是非常有趣的,尤其是那些可以有效地判定一个数是否是素数的那些性质。同样,这些有效的素性测试算法是非常实用的,例如许多加密协议需要用到大素数。

记PRIMES为所有素数构成的集合。素数的定义已经自然地给出了一种用于判断正整数(n)是否为素数的方法:枚举每一个整数(2le mle sqrt n),如果存在上述的任意一个(m)整除(n),则(n)为合数,否则(n)是素数。这种素性测试的方法在古希腊时期就已经被人们所知——它是埃拉托色尼筛选法(埃氏筛法)的一个特例,它能够得到小于(n)的所有素数。然而埃氏筛法的效率并不高,若要判断(n)是否是一个素数,所需的时间开销是(Omega(sqrt n))的。一个高效的算法应该能够在多项式时间内(输入规模是(lceil log n ceil))完成测试。费马小定理几乎直接给出了一种高效的测试算法:

费马小定理(Fermat‘s Little Theorem):

对于任意素数(p),若(a)不是(p)的倍数,则(a^{p-1}equiv 1({ m mod } p))

对于给定的(a)(n),通过反复平方计算出(a^{n-1}),可以高效地检测等式(a^{n-1}equiv 1({ m mod }n))是否成立。然而,由于一些合数(n)和部分整数(a)也能满足等式(a^{n-1}equiv 1({ m mod }n))(这些(n)称作卡迈克尔数,Carmichael numbers),因此费马素性检验不是一个正确的素性测试算法。尽管如此,费马小定理仍然是许多素性检验算法的基础。

在计算复杂性理论初步形成的1960年代,计算复杂度的概念基本确定,并且在其中定义了许多复杂度类。在此时期,素性测试问题被深入地研究。并且该问题属于co-NP类:要证明(n)不是素数,只需指出(n)的一个非平凡的因子。在1974年,V.R.Pratt发现素性测试问题也是属于NP类的。(因此该问题属于NP(cap)co-NP).

1975年,Miller基于费马小定理和广义黎曼猜想得到了一种素性检验的确定性多项式时间算法,不久后,他的算法被Rabin做出了一些修改,得到了一种无条件的、随机化的多项式时间算法。另外,Solovay和Strassen在1974年也提出了一种不同的随机化多项式时间算法。

Solovay-Strassen素性测试:

对于一个素数(n)和满足(1le ale N)的整数(a),满足:

[(frac {a}{n})equiv a^{frac {n-1}2}({ m 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 ^{21/2}n))的复杂度上界,就可以不需要筛法理论结果)。相比之下,之前的算法,如Adleman-Pomerance-Rumely算法,Goldwasser-Kilian算法,Atkin算法的正确性证明要复杂得多。

在文章第二部分,我们总结了算法背后的基本思想;第三部分,我们规定了之后使用的记号;第四部分描述算法并给出了正确性证明;第五部分,分析算法时间复杂度的界限;第六部分探讨进一步优化复杂度的途径。

第二部分:算法基本思想

我们的素数判别法基于以下的素数恒等式,这个恒等式可以看作是费马小定理的推广,是[AB]种随机多项式时间算法的基础。

引理2.1:设(ain {mathbb Z},nin {mathbb N},nge 2)((a,n)=1),则(n)是素数当且仅当

[egin{equation}(X+a)^nequiv X^n+a({ m mod }n) ag {1} end{equation} ]

证明:对于(0<i<n),在 (((X+a)^n-(X^n+a)))中, (x^i)项的系数是 (left(egin{array}{c}n\\iend{array} ight)a^{n-i}).

假设(n)为素数,则(left(egin{array}{c}n\\iend{array} ight)equiv 0({ m mod} n)),于是所有系数都为(0)

(n)为合数,考察(n)的一个素因子(q),且设(q^k||n)。由于((a,n)=1),则((a,q)=1),于是(a^{n-q})(q)互素,且(q^k)不整除(left(egin{array}{c}n\\qend{array} ight)).

于是(q^k ot | left(egin{array}{c}n\\qend{array} ight)a^{n-q})(n ot | left(egin{array}{c}n\\qend{array} ight)a^{n-q}),即(left(egin{array}{c}n\\qend{array} ight)a^{n-q} e0)在模(n)意义下成立。因此(((X+a)^n-(X^n+a)))在模(n)意义下不等于(0),于是在模(n)意义下((X+a)^n e X^n+a),证毕。

引理2.1给出了一个简单的素性检验方法:对于给定的输入(n),任选一个(a)然后计算同余式(1)是否成立。然而在最坏情况下,同余式左边需要计算(n)个系数的值,所需时间开销(Omega(n)).减少多项式项数的一个简单方法是在(1)的两侧同时模去形为(X^r-1)的多项式,(r)选择一个合适的较小数。也就是说,检验以下等式是否成立

[(X+a)^nequiv X^n+a({ m mod }X^r-1,n). ag{2} ]

由引理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)({ m mod }h(X,n)))来表示在环(Z_n[X]/(h(X)))(f(X)=g(X)).我们用符号(O^{sim }(t(n)))来表示(O(t(n)cdot { m poly}(log t(n)))),其中(t(n))是关于(n)的任意函数。例如:

[O^{sim }(log ^k n)=O(log ^k ncdot { m poly}(loglog n))=O(log ^{k+epsilon}n), forall epsilon>0 ]

(log)代表以(2)为底的对数,(ln)表示以(e)为底的自然对数。

({mathbb N,Z})分别表示自然数集和整数集。对于给定的(rin {mathbb N},ain {mathbb Z},(a,r)=1)(a)(r)的阶为满足(a^kequiv 1({ m mod} r))的最小数(k),我们将其记作(o_r(a)).

对于(rin {mathbb N},phi(r))为欧拉函数,(phi(r))的值表示小于(r)并且与(r)互素的数的数量。易知(forall a,(a,r)=1),有(o_r(a)|phi(r)).

我们需要以下的简单事实:

引理3.1:以(LCM(m))表示前(m)个数的最小公倍数,当(mge 7)时,(LCM(m)ge 2^m).

第四部分:算法描述和正确性证明

伪码描述:

输入:大于1的整数(n)

  1. (if (n=a^b for ain {mathbb N} and b>1) , output { m COMPOSITE}.)

  2. (Find the smallest r such that o_r(n)>log^2n).)

  3. (if(1<(a,n)<n for some ale r), output { m COMPOSITE.})

  4. (if(nle r), output { m PRIME}).

  5. (for a=1 to lfloorsqrt{phi(r)}log n floor do:\\ quad quad if((X+a)^n e X^n+a({ m mod }X^r-1,n)), output { m COMPOSITE;})

  6. (output { m 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 ceil}),使得(o_r(n)>log^2 n.)

证明

(n=2)时,令(r=3),有:(o_3(2)=2>log^2 2=1),满足条件。

(n>2)时,(lceil log ^5n ceil>10).设(r_1,r_2,cdots,r_t)是所有满足(o_{r_i}le log ^2n)(r_i|n)的数,则所有这样的(r_i)必定能够整除以下乘积

[ncdotprod_{i=1}^{lfloor log^2n floor}(n^i-1)<n^{log^4n}le 2^{log ^n} ]

由引理3.1,前(lceillog^5n ceil)个数的公倍数至少为(2^{lceillog^5n ceil}),而(r_1,r_2,cdots,r_t)的最小公倍数小于(ncdotprod_{i=1}^{lfloor log^2n floor}(n^i-1)),故(exists sle lceillog^5n ceil)使得(s otin {r_1,r_2,cdots,r_t}.)

((s,n)=1),则(o_s(n)>log^2n)(s)即为所求

((s,n) e 1),因为(s)不整除(n),且((s,n)in {r_1,r_2,cdots,r_t}).(r=frac s{(s,n)} otin {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,nin Z_r^*)

(l=lfloorsqrt{phi(r)}log n floor).算法第五步,验证(l)个方程。因为算法在此步不输出COMPOSITE,所以有:

[(X+a)^nequiv X^n+a({ m mod} X^r-1,n) ]

对于任意的(a,0le ale l)(平凡地,(a=0)显然成立),可知:

[(X+a)^nequiv X^n+a({ m mod }X^r-1,p) ag{3} ]

对于(forall a, 0le ale l),由引理2.1,我们有:

[(X+a)^pequiv X^p+a({ m mod }X^r-1,p) ag{4} ]

对于(forall a, 0le ale l),由方程(3)和(4),我们有:

[(X+a)^{frac np}equiv X^{frac np}+a({ m mod }X^r-1,p) ag{5} ]

对于(forall a, 0le ale l),在上面的方程中,(n)(n/p)的性质类似于素数(p),我们对于以上的等式性质给出一个定义:

定义4.4:对于多项式(f(X))和整数(min {mathbb N}),如果:

[[f(X)]^mequiv f(X^m)({ m mod }X^r-1,p) ]

则我们称(m)(f(X))自省数

由方程(5)和(4),我们可以看出,当(0le ale l)时,(p)(n/p)都是(X+a)的自省数。

接下来的引理证明了自省数在乘法下封闭。

引理4.5:如果(m)(m‘)(f(X))的自省数,则(mcdot m‘)也是(f(X))的自省数。

证明:由于(m)(f(X))的自省数,我们有:

[[f(X)]^{mcdot m‘}equiv [f(X^m)]^{m‘} ({ m mod }X^r-1,p) ]

由于(m‘)也是(f(X))的自省数,我们有:

[[f(X^m)]^{m‘}equiv f(X^{m,m‘})({ m mod} X^{mcdot r}-1,p) ]

又因为(X^r-1)整除(X^{mcdot r}-1),则上式

[L.H.S.equiv f(X^{mcdot m‘})({ m mod} X^r-1,p) ]

证毕。

引理4.6:对于数(m),以(m)为自省数的多项式集合对乘法封闭。即:如果(m)(f(X))(g(X))的自省数,那么(m)也是(f(X)cdot g(X))的自省数。

证明

[[f(X)cdot g(X)]^m=[f(X)]^mcdot [g(X)]^mequiv f(X^m)cdot g(X^m)({ m mod} X^r-1,p) ]

以上两个引理说明:对于集合(I={(n/p)^icdot p^j|i,jge 0 })中的任意一个数,它都是集合(P={prod_{a=0}^l(X+a)^{e_a}|e_age 0 })中任意一个多项式的自省数。在此基础上我们定义两个群,它们将在后面的证明中起到重要的作用。

第一个群是集合(I)中的数模(r)的余数构成的群,即:

[G=langle (frac{n}{p})^icdot p^j({ m mod} r)|i,jge 0 angle ]

由于((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({ m mod }h(X,p)) ,X+1({ m mod }h(X,p)),cdots,X+l({ m mod }h(X,p)) angle).令(F=F_p[X]/(h(X))) ,则(mathcal G)是乘法群(F)的一个子群。

以下引理给出了群(mathcal G)的阶的一个下界,它由Hendrik Lenstra Jr.证明,并对我们早期研究中给出的算法的下界作了些许改进。

引理4.7(Hendrik Lenstra Jr.引理)

[|{mathcal G}|geleft(egin{array}{c}t+l\\t-1end{array} ight) ]

作者注: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)({ m mod} h(X),p)).再设(min I),则

[[f(X)]^mequiv [g(X)]^m({ m mod}h(X),p) ]

由于(m)(f(X),g(X))的自省数,且(h(X))整除(X^r-1),我们得到:

[f(X^m)equiv g(X^m)({ m mod}h(X),p) ]

这意味着对于(forall min 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) otequiv g(X)({ m mod} h(X),p)).

注意到对于(F_p)中的(1le i e jle l)(i e j).且(l=lfloor sqrt{phi(r)}log n floor <sqrt rlog n<r<p).所以在(F)(X,X+1,X+2,cdots,X+l)两两不等。同时,因为(h)次数大于1,(X+a e 0)对于(F)中的任意一个(a,0le ale l)都成立,所以(mathcal G)中至少有(l+1)个不同的一次多项式。因此(mathcal G)中至少存在(left(egin{array}{c}t+l\\t-1end{array} ight))个次数小于(t)的不同的多项式。证毕。

(n)不是素数(p)的方幂,那么我们可以给出(mathcal G)的阶的一个上界。

引理4.8:如果(n)不是素数(p)的方幂,那么(|{mathcal G}|le n^{sqrt t})

证明:考虑以下(I)的子集

[hat I={(frac np)^icdot p^j|0le i,jle lfloor sqrt t floor }. ]

如果(n)不是(p)的方幂,那么集合(hat I)中有((lfloor sqrt t floor )^2>t)个不同的数。又因为(|G|=t)(hat I)中至少存在两个数在模(r)意义下相等。不妨设这两个数分别是(m_1,m_2),且(m_1>m_2).于是我们有:

[X^{m_1}equiv X^{m_2}({ m mod} X^r-1,p ) ]

(f(X)in P).那么:

[egin{aligned}{}[f(X)]^{m_1}&equiv f(X^{m_1})({ m mod} X^r-1,p )\\&equiv f(X^{m_2})({ m mod} X^r-1,p )\\&equiv [f(X)]^{m_2}({ m mod} X^r-1,p )end{aligned} ]

这意味着在域(F)

[[f(X)]^{m_1}=[f(X)]^{m_2} ]

因此,(f(X)in {mathcal G})是域(F)中的多项式(Q‘(Y)=Y^{m_1}-Y^{m_2})的根。由于(f(X))具有任意性,多项式(Q‘(Y))在域(F)中至少具有(|mathcal G|)个互不相等的根。又

[{ m deg} (Q‘(Y))=m_1le (frac npcdot p)^{lfloor sqrt t floor}le n^{sqrt t} ]

也就证明了(|{mathcal G}|le n^{sqrt t}),证毕。

有了以上的准备,我们现在可以证明算法的正确性了。

引理4.9:如果算法返回PRIME,那么(n)是素数。(必要性)

证明:假设算法返回PRIME,由引理4.7,对于(t=|G|)(l=lfloor sqrt{phi (r)}log n floor),有

[egin{aligned}{}|{mathcal G}|&geleft(egin{array}{c}t+l\\t-1end{array} ight)\\&ge left(egin{array}{c}l+1+lfloorsqrt t log n floor\\ lfloor sqrt tlog n floor end{array} ight) quad({ m since }t>sqrt tlog n) \\&geleft(egin{array}{c}2lfloor sqrt tlog n floor+1\\lfloor sqrt tlog n floorend{array} ight) quad({ m since }l=lfloor sqrt{phi (r)}log n floorge lfloor sqrt tlog n floor ) \\&ge2^{lfloor sqrt tlog n floor +1}quadquadquad({ m since }l=lfloor sqrt tlog n floor gelfloor log ^2nge1 floor )\\&ge n^{sqrt t}end{aligned} ]

由引理4.8,若(n)不是素数(p)的方幂,则${|mathcal G|}le n^{sqrt t} $.因此由上述不等式,可知:

[n=p^kquad (exists k>0). ]

(k>1),则算法在第一步返回COMPOSITE,因此这里的情况只能是(n=p)。这就完成了对定理4.1的证明。

第五部分:分析算法时间复杂度的界限

我们计算复杂度基于以下事实:两个长为(m)比特的数的加法,乘法,出发运算时间复杂度是(O^{sim}(m)).类似的,两个次数为(d)、系数至多为(m)比特的多项式的运算的时间复杂度是(O^{sim}(dcdot m)).

定理5.1:算法的渐进时间复杂度是(O^{sim }(log ^{21/2}n)).

证明:算法的第一步渐进时间复杂度为(O^{sim }(log ^{3}n)).

在算法的第二步,我们要找一个满足(o_r(n)>log ^2 n)(r),这可以通过验证对于每一个(r,forall k,1le kle log ^2 n),是否满足$n^k otequiv1({ m mod} r) (.对于一个固定的)r(,计算)n^k({ m mod }r)(需要作至多)O(log ^2 n)(次模)r(乘法,所需时间复杂度为)O(log ^2nlog r)(.由引理4.3我们知道只需检验)O(log ^5 n)(个不同的)r(的值。因此第二步的时间复杂度为)O^{sim }(log ^7n)$.

算法第三步包括计算(r)对数的最大公因数。求最大公因数的时间复杂度是(O(log n)),因此这一部的时间复杂度是(O(rlog n)=O(log ^6n).)

算法第四步复杂度仅为(O(log n)).

算法第五步,我们需要验证(lfloor sqrt{phi(r)}log n floor)个方程。验证每个方程需要(O(log n))次次数为(r),系数大小为(O(log n))的多项式乘法。所以验证每个方程需要的时间开销为(O^{sim }(rlog ^2n))。因此第五步的总时间复杂度为

[O^{sim}(rsqrt{phi(r)}log^3n)=O^{sim}(r^{3/2}log ^3n)=O^{sim}(log^{21/2}n). ]

这个时间复杂度已经涵盖了其它步骤的复杂度,因此算法整体的时间复杂度为(O^{sim}(log^{21/2}n).)证毕。

通过改进对整数(r)的估计精度(由引理4.3),算法的时间复杂度还可以进一步优化。对于最好的情况,即(r=O(log^2n))时,总的时间复杂度为(O^{sim}(log ^6n)).事实上,有两个猜想可以支持(r=O(log^2n))的可能性。(以下的(ln)以自然对数的底数(e)为底)

Artin猜想

对于给定的(nin {mathbb N}),且(n)不是完全平方数,则满足(o_q(n)=q-1)(qle m)的素数(q)的个数渐进为(A(n)cdot frac m{ln m}).这里的(A(n))称为Artin常数(A(n)>0.35).

苏菲·姬曼(Sophie Germain)素数密度猜想

满足(2q+1)仍为素数的素数(qle 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),在(8log ^n)(clog^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},capprox frac 1{12})的素数(q)以正密度出现。基于以上基础,Fouvry证明了以下结果

引理5.2

[exists c>0,n_0\\ { m s.t.quad } forall xge n_0:\\|{q|q是素数且qle x 且 P(q-1)>q^{frac23} }|ge cfrac 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 floor (次,以保证群)mathcal G(的阶足够大。如果我们可以证明由较少的)(X+a)$也能生成同样结束的群,则循环的迭代次数可以减少。这是极有可能的。

若以下猜想成立,算法的复杂度还可以进一步优化至(O^{sim}(log ^3n))(引用文献[BP]提出了此猜想,并在[KS]中验证了(rle 100,nle 10^{10})的情况)。

猜想6.1:对素数(r),如果(r)不整除(n)且满足

[(X-1)^nequiv X^-1({ m mod }X^r-1,n). ag6 ]

(n)要么是一个素数,要么(n^2equiv 1({ m mod }r)).

如果以上猜想成立,我们可以略微修改一下算法,首先寻找不整除(n^2-1)的整数(r),这样的(r)必可在([2,4log n])区间内找到。这是因为小于(x)的素数的乘积不小于(e^x)(见引用文献[Apo]).然后我们需要验证同余式(6)是否成立,其时间复杂度为(O^{sim}(rlog^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页)



以上是关于论文翻译:《PRIMES is in P》——素性测试的确定性多项式时间算法研究的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的 AKS Primes 算法

SPOJ - PGCD Primes in GCD Table(莫比乌斯反演)

SPOJ-PGCD Primes in GCD Table

Count Primes [LeetCode 解题报告]

projecteuler----&gt;problem=10----Summation of primes

AKS素性检测