AKS算法(AKS algorithm)・预备知识・数学篇

前言

主要会是一些数论与有限域(Finite Field)的知识。就像我们在算法篇中提到的那样,内容可能看起来会有些零散,但都是最终证明AKS算法复杂度与正确性之时不可或缺的东西。

1.素数定理

计数总是一切研究的开始,既然有了素数这个概念,自然我们就希望知道对于给定的(正,下同)整数$n$,不大于$n$的素数究竟有多少个。我们用$\pi(n)$来表示不大于$n$的素数个数,这个函数也被称为素数计数函数。

我们希望知道$\pi(n)$的增长速率,但这并不是一件容易的事情。不过稍有些数论基础的读者可能会立即指出,由素数定理(Prime Number Theorem)可知,

\[\lim_{x \to \infty} \frac{\pi (x)}{x / \ln x} = 1\]

注意到这里的$x$是一个正实数,于是我们的问题便完美的解决了—我们本可以就此结束,不过这样就失去学习的意义了。还是让我们来看看这个结论是如何被证明的吧。

考虑到实际上我们只想要知道$\pi (n)$的渐进分布与素数定理证明的复杂程度,在这里我决定介绍Erdős所写的一个弱一些的素数定理,即

\[\pi (n) \sim \frac{n}{\log n}\]

的证明。

1.1 上界

首先是$\pi (n)$上界的证明。

一个直接的观察是$\pi (n) \le n$,因为至多只有$n$个(正整)数小于等于$n$。它看起来似乎还差点意思,于是我们退而求其次,考虑一些比$n$小的数字。一个简单的计算可知$\sqrt{n} \le \frac{n}{\log n}$,因而我们有

\[\pi (\sqrt{n}) \le \sqrt(n) \le \frac{n}{ \log n}\]

接下来的思路便是寻找$\pi (n)$与$\pi (\sqrt{n})$之间的关系,首先我们将这两项相减,由$\pi (n)$定义可知(注意接下来文中所有出现的字母$p$均指素数$p$)

\[\pi (n) - \pi (\sqrt{n}) = \sum_{\sqrt(n) < p \le n} 1\]

我们可以对式子中的$1$进行一些适当的放大,本着由小到大的原则,让我们首先试试对数。于是我们有

\[(\pi (n) - \pi (\sqrt{n}))\log \sqrt{n} = \sum_{\sqrt(n) < p \le n} \log \sqrt{n} \le \sum_{p \le n} \log p\]

从而问题转变为了估计$\prod_{p \le n} p$。

为了得到想要的结果,我们希望对于某个正整数$c$,有

\[\prod_{p \le n} p \le c^n\]

在选定$c$的值之后,我们便可以使用万能的数学归纳法来进行证明。就算毫无头绪,也可以从$c = 2$开始慢慢尝试,这实际上是非常幸运的情况了。这里我们选定$c = 4$来完成我们的证明。

显然$1 \le n \le 4$的时候命题是成立的,当$n \ge 5$的时候,首先我们考虑$n$为奇数的情况,则有

\[\prod_{p \le n} p = \Bigg ( \prod_{p \le (n + 1) / 2} p \Bigg ) \times \Bigg ( \prod_{(n + 3) / 2 \le p \le n} p \Bigg )\]

由归纳假设可知,

\[\prod_{p \le (n + 1) / 2} p \le 4^{(n + 1) / 2}\]

又因$n\ge 5$,我们有$(n+3)/2 \ge 4$,既而可知$p$一定是个奇数。

联系到我们之前介绍过的二项式系数,我们发现有一个组合数是包含了$[(n+3)/2, n]$中所有奇数的乘积的,即

\[\frac{\frac{n+3}{2} \frac{n+5}{2} \ldots n}{(\frac{n - 1}{2})!} = \binom{n}{(n+1) / 2}\]

且很显然这个组合数是可以被任意的$(n + 3) / 2 \le p \le n$整除的,因而我们有

\[\begin{align} \prod_{(n + 3) / 2 \le p \le n} p &\le \binom{n}{(n+1) / 2} \\ &= \frac{1}{2} \Bigg ( \binom{n}{(n+1)/2} + \binom{n}{(n-1)/2} \Bigg) \\ &\le \frac{1}{2} \times 2^n = 2^{n-1} \end{align}\]

即有

\[\prod_{p \le n} p \le 4^{(n+1)/2} 2^{n-1} = 4^n\]

当$n$为偶数时,由于$n$必然不是一个素数,我们有

\[\prod_{p \le n} p = \prod_{p \le n-1} p \le 4^{n-1} \le 4^n\]

回到$\pi (n)$,我们有

\[(\pi (n) - \pi (\sqrt{n}))\log \sqrt{n} \le \sum_{p \le n} \log p \le 2n\]

用上之前提到的$\pi (\sqrt{n}) \le \frac{n}{\log n}$和一些代数运算,可以得到

\[\pi (n) \le \frac{5n}{\log n}\]

1.2 下界

下界的证明是一个叫做Nair的人于1982年发表在《The American Mathematical Monthly(Vol. 89, No. 2)》上的。他的基本想法是借助算数基本定理最小公倍数

令$p_1, \ldots, p_k$为小于或等于$n$的素数,则由算数基本定理可知,我们可以将任意一个正整数$m \le n$写作

\[m = \prod_{i=1}^k p_i^{a_{mi}}, \quad 1 \le a_{mi} \le k\]

此时考虑$1, \ldots, n$的最小公倍数$d_n$,它可以被写作

\[d_n = \prod_{i=1}^k p_i^{\max (a_{1i}, \ldots, a_{ni})}\]

并且注意到$p_i^{\max (a_{1i}, \ldots, a_{ni})} \le n$,因而有

\[d_n \le \prod_{i=1}^k n = n^{\pi (n)}\]

于是靠着这一串奇特的操作,我们将$\pi (n)$与$d_n$联系了起来。

那么接下来就是给$d_n$寻找一个下界了。Nair在这里巧妙的构造了一个积分$I = \int_0^1 x^n (1-x)^n dx$。当$0 \le x \le 1$时,我们有$0 \le x(1-x) \le \frac{1}{4}$,因此

\[0 \le I \le (\frac{1}{4})^n\]

回忆起我们在二项式系数与组合恒等式中学到的东西,我们有

\[\begin{align} I &= \int_0^1 x^n \sum_{k=0}^n (-1)^k \binom{n}{k}x^k dx \\ &= \sum_{k=0}^n (-1)^k \binom{n}{k} \int_0^1 x^{n+k} dx \\ & = \sum_{k=0}^n (-1)^k \binom{n}{k} \frac{1}{n+k+1} \end{align}\]

因为$n+k+1$最大只能为$2n + 1$,我们有$I \times d_{2n+1} \in \mathbb{N}_+ $。即有

\[d_{2n+1} \ge \frac{1}{I} \ge 4^n\]

也就是$d_n \ge 2^{n-1}$。于是得到了想要的下界,虽然看起来似乎有些讨巧。

2.群与有限域

阅读接下来的部分需要一些有关于抽象代数(Abstract Algebra)的知识—至少得知道群(Group)、环(Ring)等基础概念的定义。虽然这些文章本质上是在抄书造轮子,但事无巨细也稍显无趣。

令$p$是一个素数,$d \ge 1$为一个整数。我们知道剩余类环$\mathbb{Z}_p$也同样是一个域(field)。证明这一点并不是一件难事,按照定义一条条来就可以。不过在之后的部分中,我们主要考虑与多项式有关的东西—毕竟文章的初衷是介绍一些与AKS算法相关的背景知识。令$h(x)$为度数为$d$的于$\mathbb{Z}_p[x]$上的不可约多项式。也就是说,$\mathbb{Z}_p[x]$中不存在度数低于$d$的多项式$a(x),b(x)$使得$h(x) = a(x)b(x)$。

多项式环(polynomial ring)的定义与符号(即上文中的$\mathbb{Z}_p[x]$)也是相当常见的东西了,稍有些基础的读者对此应该都不会太陌生,在这里也就不再赘述了。


我们首先考虑商环$F = \mathbb{Z}_p[x] / h(x)$的一些性质。

$F$是一个大小为$p^d$的域(即$F$中包含有$p^d$个元素)。

$F$的大小是很显然的,因为$\mathbb{Z}_p[x]$中度数低于$d$的多项式数量就是$p^d$—多项式一共有$d$项,而每一项的系数可以选取$0, \ldots, p-1$中的任意一个。接下来我们主要证明对于$F$中任意一个非零多项式$f(x)$,都存在对应的乘法逆元$f^{-1}(x)$。

这实际上很容易,由于$h(x)$不可约性质,我们有$GCD(f(x), h(x)) = 1$,这里$GCD$表示最大公约数—或许最大公约多项式的说法会更好一些。

因而根据辗转相除法,我们能够得到两个在$\mathbb{Z}_p[x]$中多项式$a(x)$和$b(x)$,使得

\[a(x)f(x) + b(x)h(x) = 1\]

因而,在$F$中,我们有

\[a(x)f(x) + b(x)h(x) \equiv a(x)f(x) \equiv 1\]

也就是说此时$a(x)$可以作为$f(x)$的一个乘法逆元,于是我们选取$f^{-1}(x) = a(x) \mod h(x)$即可。


我们还需要两个有关于多项式环的性质,但在那之前,我们需要几条与乘法群相关的基本性质,

令$G$为一个大小为$n$的有限乘法群,其单位元为$1$。令$a\in G$为$G$中的一个元素,则有$a^n = 1$。

这个引理的证明的思路基于拉格朗日定理(Lagrange’s Theorem)

令$H = \{ 1, a, a^2, \ldots, a^{d-1}\}$,若$H$是$G$的一个子群的话,那么根据拉格朗日定理,我们知道$d = \lvert H \rvert$是整除$n$的。因而存在一个正整数$k$,使得$a^n = (a^d)^k = 1$,便得到了我们想要的结论。

而从定义出发证明$H$是$G$的一个子群是一个相对机械的活,建议大家自己试一试,在这里就略过了。

另外一个广为人知的我们会用到的结论是

有限域上的乘法群是循环群。

一些整数域上的结论也同样可以推广至多项式中,譬如

令$F$为一个域,$f(x)$为$F[x]$中的一个度数为$d$的多项式,若$d \ge 1$,则有

  • $F$中至多只有$d$个元素$\alpha$使得$f(\alpha) = 0$。
  • $f(x)$可以写为$F[x]$中若干不可约多项式$p_1(x), \ldots, p_k(x)$的乘积,即$f(x) = \prod_{i=1}^k p_i(x)$。

前者是代数基本定理的直接应用,而后者则是算数基本定理的推广。


接着让我们进入正题。

令$p$为一个素数,$f(x)$是$\mathbb{Z}_p [x]$上的一个多项式。则等式

\[f(x^p) = f(x)^p\]

(于$\mathbb{Z}_p [x]$)上成立。

这里如果$d = 0$,那么这个引理就退化成了我们在素性测试中提到过的费马小定理。所以这个引理实际上可以看做是费马小定理的一个推广。在接下来的证明中,我们始终假设$d \ge 1$。

既然$d = 0$的时候是成立的,我们不妨用数学归纳法来证明这个引理—假设对于度数低于$d$的多项式,该引理是成立的。那么我们不妨设$f(x) = ax^d + g(x)$,其中$a \in \mathbb{Z}_p$,$g(x)$是$\mathbb{Z}_p [x]$上的一个次数低于$d$的多项式,则有

\[\begin{align} f(x)^p &= (ax^d + g(x))^p \\ &= \sum_{i = 0}^p \binom{p}{i}a^i x^{id} g(x)^{p-i} \\ &= g(x)^p + a^p x^{pd} \end{align}\]

等式的最后一步源于对于任意的$1 \le i \le p - 1$,我们有$\binom{p}{i} \equiv 0 \pmod p$。归纳结束。


于是终于到了最后一个。事实上我们前面提到的许多引理都是为马上要介绍的这一条做准备,这一条也将会是之后证明AKS算法正确性之时最核心的一条引理。

令$p$与$r$为不同的两个素数,令$d$为$p \mod r$的乘法阶(multiplicative order)。则每一个$\mathbb{Z}_p [x]$上的能够整除$(x^r - 1) / (x - 1)$的不可约多项式的度数均为$d$。

这个引理的证明可能会稍有些长,我们首先假设$h(x)$是$\mathbb{Z}_p [x]$上的能够整除$(x^r - 1) / (x - 1)$的一个不可约多项式,其度数为$k$。我们将通过证明$k \mid d$且$d \mid k$来说明$k = d$。

由上面的结论可知,$\mathbb{Z}_p [x] / h(x)$是一个域且大小为$p^k$。令$g(x)$是$\mathbb{Z}_p [x] / h(x)$上的乘法群的一个生成元(generator)。因而$g(x)$的乘法阶为$p^k - 1$。且$\mathbb{Z}_p [x]$上有$g(x)^p = g(x^p)$,于是于$\mathbb{Z}_p [x]$上我们有

\[g(x)^{p^d} = g(x^{p^d})\]

而由于$p$与$r$互素,我们有$p^d \equiv 1 \pmod r$。于是存在一个整数$k$,使得我们可以将$p^d$写作$1 + kr$。

令$f(x)$为$\mathbb{Z}_p [x]$上的一个多项式且有$f(x)h(x) = x^r - 1$,则于$\mathbb{Z}_p [x]$上我们有

\[x^{p^d} = x \times x^{kr} = x(1 + f(x)h(x))^k = x \mod h(x)\]

进而有

\[g(x)^{p^d} = g(x) \mod h(x)\]

考虑到$g(x)$是一个生成元且$h(x)$不可约,我们知道$g(x) \neq 1 \mod h(x)$。因而$g(x)$在域$\mathbb{Z}_p [x] / h(x)$上有一个逆,即有

\[g(x)^{p^d - 1} = 1 \mod h(x)\]

结合到$g(x)$的乘法阶为$p^k - 1$,我们有$p^k - 1 \mid p^d - 1$。这里令$d = qa + b$,我们有

\[\begin{align} \frac{p^d - 1}{p^k - 1} &= \frac{p^b (p^{qa} - 1) + (p^b - 1)}{p^k - 1} \\ &= p^b (1 + p^a + \ldots + p^{(q-1)a}) + \frac{p^b - 1}{p^k - 1} \end{align}\]

因而$\frac{p^b - 1}{p^k - 1}$是一个整数,这也就决定了$r$必须为$0$。也就是说$k \mid d$。

$d \mid k$部分的证明相比起来要容易一些,在这里我决定偷个懒,如果有人读到这里且有一些抽代背景知识的话,不妨自己考虑考虑。

3.后记

到这里我们关于理解AKS算法的预备知识也就介绍完毕了,AKS篇章的内容主要参考了Michiel Simd所写的证明。更多的有关于AKS算法的信息,可见这里

由于我本身不太熟悉这方面相关的知识,内容或许有些纰漏,又或者是有些啰嗦的地方—毕竟总有些脑壳不太够用的时候,但大体上应该不会太影响阅读。

单靠一时兴起去学习一样东西果然还是略显枯燥了一些,这给了我一些警示,需要合理安排学习的方向与时间,但既然坑挖出来了,该填的还是要填的。

说起之后的计划,在结束AKS算法的介绍之后,应该会考虑讲一讲自己研究方向相关的东西—挺冷门的,但我觉得相当有趣。

以上。