📜  AKS原始性测试(1)

📅  最后修改于: 2023-12-03 14:39:04.313000             🧑  作者: Mango

AKS原始性测试

什么是AKS原始性测试?

AKS原始性测试(AKS Primality Test),也叫AKS算法,是一种用于确定一个数是否为素数的算法。它是由三个计算机科学家——Manindra Agrawal、Neeraj Kayal和Nitin Saxena在2002年提出的。

相较于其他的素数检验算法,如费马小定理和米勒-拉宾素性检验等,AKS算法在理论上和实践中都有更好的表现。它最重要的属性是确定性,意味着在有限时间内,AKS算法可以准确判断一个数是否为素数,同时不会漏判和误判。

AKS算法的实现原理

AKS算法主要基于一个叫作“二项式定理”的数学定理。此定理定义了一个关于多项式的等式:

$(x+y)^n=\sum_{k=0}^n \binom{n}{k}x^ky^{n-k}$

这里,$\sum$表示求和,$\binom{n}{k}$表示从$n$中选出$k$个元素的排列组合数,$x^k$和$y^{n-k}$是两个多项式。

通过移项,上式可以变形为:

$(x+y)^n-\sum_{k=0}^n \binom{n}{k}x^k y^{n-k} = \sum_{k=1}^{n-1} \binom{n}{k}x^k y^{n-k}$

再将$n$看作一个素数,上式右边的部分可以通过模运算的方法简化为如下形式:

$(x+y)^p \equiv x^p + y^p \pmod{p}$

这个等式揭示了一个有趣的性质:若$p$为素数,且选取合适的$x$和$y$,那么等式两边的结果应该是相等的。如果两边的结果不等,那么$p$一定不是素数。

于是,AKS算法的主要过程是构造合适的$x$和$y$,然后检验是否符合上述等式。

AKS算法的实现

AKS算法的实现可以分为如下几个步骤:

  1. 检查是否为一个特殊的情况,例如$p=2$或$p=3$。如果是,那么$p$为素数。
  2. 将$p$分解为$kq+1$的形式。其中,$q$是一个整数,而$k$则是$p-1$的因子。
  3. 对于1到$\sqrt{q}\times\log_2(p)$的所有整数$a$,检验$(x+a)^p \equiv x^p + a \pmod{p}$是否成立。其中,$x$是一个多项式,具有$a_0=1$和所有其他系数都是0的形式。
  4. 如果以上所有检验都通过,那么$p$就是一个素数。否则,它是一个合数。

在实际实现中,步骤3是AKS算法的最耗时的部分,因为它需要进行大量的模运算和次幂计算。为了降低时间复杂度,可以使用多项式快速幂算法和模拟多项式乘法的NTT算法等技术手段。

结语

AKS原始性测试是一种使用纯数学定理来判断一个数是否为素数的算法。相较于其他素数检验算法,它的准确率更高,同时也更容易理解和实现。不过,由于它的时间复杂度并不是最优的,因此在实际应用中,还需要根据不同的需求选择合适的素数检验算法。