AKS 素性检验的简要介绍

AKS Primality Test

AKS 素性测试的基于这样一个结论:

对于 n≥2n \geq 2, 有同余多项式:

(x+a)n≡(xn+a)(modn)(x + a)^n \equiv (x^n + a) \pmod n

当且仅当 nn 为质数时, 对所有 gcd⁡(a,n)=1\gcd(a, n) = 1 的 aa 成立.

组合数和质数

为了说明上面这个式子的正确性, 我们需要先证明如下式子, 对 n≥2n \geq 2 当且仅当 nn 为质数时成立:

(nk)≡0(modn)    (0<k<n)\binom nk \equiv 0 \pmod n ~~~~ (0 < k < n)

整理式子:

(nk)≡0(modn)nk‾k!≡0(modn)\begin{aligned} \binom nk &\equiv 0 \pmod n\\ \frac{n^{\underline{k}}}{k!} &\equiv 0 \pmod n\\ \end{aligned}

对于质数 nn, 我们知道 k!k! 一定不含因数 nn, 而 nk‾n^{\underline{k}} 一定含因数 nn, 因此对于所有 kk 都有 n∣nk‾k!n | \dfrac{n^{\underline{k}}}{k!}. 因此该结论成立是 nn 是质数的必要条件.

对于合数 nn, 我们取它的一个质因子 pp, 假设 nn 中有 ss 个 pp, 那么一定有 k=psk = p^s 时, 上式不成立. 我们知道 ps!p^s! 中 pp 的次数为 ∑i=0s−1pi\displaystyle{\sum_{i = 0}^{s - 1} p^i}, 而 nk‾n^{\underline{k}} 中 pp 的次数也是 ∑i=0s−1pi\displaystyle{\sum_{i = 0}^{s - 1} p^i}, 因此 nk‾k!\dfrac{n^{\underline{k}}}{k!} 中 pp 的次数为 00, 而 nn 中 pp 的次数为 ss, 因为 pp 是 nn 的质因数, 所以 s>0s > 0. 因此这时 nk‾k!≡0(modn)\dfrac{n^{\underline{k}}}{k!} \equiv 0 \pmod n 不成立, 该结论成立时 nn 是质数的必要条件.

综上, 对于 n≥2n \geq 2. 对所有 0<k<n0 < k < n, 满足 (nk)≡0(modn)\dbinom nk \equiv 0 \pmod n 是 nn 为质数的充要条件.

AKS 的基础推论

因此可以证明一开始的结论:

(x+a)n≡(xn+a)(modn)∑i=0n(ni)xian−i≡(xn+a)(modn)xn+an+∑i=1n−1(ni)xian−i≡(xn+a)(modn)an+∑i=1n−1(ni)xian−i≡a(modn)\begin{aligned} (x + a)^n &\equiv (x^n + a) \pmod n\\ \sum_{i = 0}^n \binom ni x^ia^{n - i} &\equiv (x^n + a) \pmod n\\ x^n + a^n + \sum_{i = 1}^{n - 1} \binom ni x^ia^{n - i} &\equiv (x^n + a) \pmod n\\ a^n + \sum_{i = 1}^{n - 1} \binom ni x^ia^{n - i} &\equiv a \pmod n\\ \end{aligned}

当 nn 是质数的时候, 这个式子的正确性是显然的, 因为我们已经证明了这些二项式系数在 nn 为质数的时候为 00, 而且根据费马小定理有 an≡a(modn)a^n \equiv a \pmod n, 因此满足这个结论是 nn 为质数的必要条件.

当 nn 不是质数的时候, 情况有些复杂, 我思考了好久也没有证明出来. 而且这个证明在中英文维基百科上都没有写, 所以去《信息安全数学基础》上试图找到合理的解释.

对于同余多项式, 它们相等当且仅当 xx 每一个次方的系数在模对应模数意义下相等, 所以我们只要对于某一个满足 gcd⁡(a,n)=1\gcd(a, n) = 1 的 aa, 在某一项 xi,i∈(0,n)x^i, i \in (0, n) 中说明它的系数不为 00, 就可以说明对于合数 nn 这个条件不成立.

假设合数 nn 有质因子 pp, nn 中一共有 ss 个 pp 相乘. 那么 xpx^p 的系数为 (np)an−p\dbinom np a^{n - p}. 前面已经得出了相关的结论, 得到 (np)\dbinom np 中 pp 的次数为 s−1s - 1, 而因为 aa 和 nn 互质所以 aa 也不能提供因子 pp, 因此 (np)an−p\dbinom np a^{n - p} 中 pp 的次数也为 s−1s - 1, 也就是模 nn 意义下不为 00. 所以满足这个结论是 nn 为质数的充分条件.

综上, 满足这个结论是 nn 为质数的充要条件. AKS 的原理就是从这个推论中导出的.

但是如果每次计算这个多项式会发现, 多项式有 nn 项, 所以需要 O(n)O(n) 的时间复杂度, 所以为了得到更优的复杂度, 有更强的推论.

定理的推广

如果我们把上面的式子对 xr−1x^r - 1 这样形式的多项式进行取模, 然后判断是否成立, 一定可以判断出不成立的情况. 也就是说对于任意 xr−1x^r - 1, 满足下面的式子是满足前面提出的式子的必要条件.

(x+a)n≡xn+a(modxr−1,n)(x + a)^n \equiv x^n + a \pmod {x^r − 1, n}

AKS 得出了结论, 我们只要在 rr 是多项式 log⁡n\log n 的情况下, 判断对于多项式 log⁡n\log n 个 aa, 是否满足上面的同余式成立, 即可判断 nn 是否是质数的幂.

对互质的 nn 和 rr 定义 nn 模 rr 的阶 ordr(n)ord_r(n) 表示满足 nb≡1(modr)n^b \equiv 1 \pmod r 的最小的正整数 bb. 根据欧拉定理 (数论) 显然有 ordr(n)∣ϕ(r)ord_r(n) | \phi(r).

在论文中, 作者证明了 rr 可以在 log⁡5n\log^5 n 的级别内找到, 而 aa 也可以仅判断前 ϕ(r)log⁡n\sqrt {\phi(r)} \log n 级别的数.

关于这个结论的证明, 需要用到大量抽象代数的知识, 但是我不想学抽象代数, 怎么办呢?

所以略过这部分的证明.

AKS Algorithm

首先需要判断 nn 是整数 mm 的整数 kk 次方的情况. 我们可以枚举 kk, 容易发现只有 O(log⁡n)O(\log n) 个 kk, 然后用牛顿法开 nk\sqrt[k]n. 这个过程可以在多项式 log⁡n\log n 的时间内进行.

我们找到最小的正整数 rr, 使得 ordr(n)>log⁡2(n)ord_r(n) > \log^2(n), 并且试除 rr 以内的数字. 如果 r≥nr \geq n, 判定 nn 为质数.

对 ϕ(r)log⁡n\sqrt {\phi(r)} \log n 以内的 aa 判断 (x+a)n≡xn+a(modxr−1,n)(x + a)^n \equiv x^n + a \pmod {x^r − 1, n} 是否成立, 成立则 nn 为质数, 否则是合数.

这个算法最朴素的实现可以达到 O(log⁡12npoly(log⁡log⁡n))O(\log^{12} n \text{poly}(\log \log n)).

之后出现了优化到 O(log⁡6npoly(log⁡log⁡n))O(\log^6 n \text{poly}(\log \log n)) 的变体.

参考文献