📅  最后修改于: 2023-12-03 14:39:04.313000             🧑  作者: Mango
AKS原始性测试(AKS Primality Test),也叫AKS算法,是一种用于确定一个数是否为素数的算法。它是由三个计算机科学家——Manindra Agrawal、Neeraj Kayal和Nitin Saxena在2002年提出的。
相较于其他的素数检验算法,如费马小定理和米勒-拉宾素性检验等,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算法的实现可以分为如下几个步骤:
在实际实现中,步骤3是AKS算法的最耗时的部分,因为它需要进行大量的模运算和次幂计算。为了降低时间复杂度,可以使用多项式快速幂算法和模拟多项式乘法的NTT算法等技术手段。
AKS原始性测试是一种使用纯数学定理来判断一个数是否为素数的算法。相较于其他素数检验算法,它的准确率更高,同时也更容易理解和实现。不过,由于它的时间复杂度并不是最优的,因此在实际应用中,还需要根据不同的需求选择合适的素数检验算法。