9. 数论初步

由于数论的研究对象是整数集 Z,在不加说明的情况下本节的所有变量默认都定义在 Z 上。

众所周知,在整数集上的除法运算是这样定义的:整数 a 除以整数 b 会得到一个 商(quotient)q余数(remainder)r,使得 a=qb+r除法定理 表明,存在唯一的 qr,满足 a=qb+rr[0,|b|)。在后面,我们记两个整数 ab 的商与余数分别为 qcnt(a,b)rem(a,b)

我们称 a 整除 b,当且仅当 kZ.ka=b。记作 ab

依据整除的定义,显然有如下整除的性质成立:

在最后一条性质中,我们称对整数 bc,所有可以被写作 pb+qc 的整数为 bc整数线性组合,简称线性组合。更一般而言,对于一组整数 a1,a2,,anA 为这组数的一个线性组合,当且仅当存在一组整数 k1,k2,,kn,有

A=i=1nkiai

此外,对于能够同时整除 bca,我们称其为 bc公约数。所有公约数中最大的数称作 最大公约数,记作 a=gcd(b,c)。依据良序原理,只要两个整数 ab 不同时为 0,则 gcd(a,b) 存在。

显然有如下关于最大公约数的性质成立:

gcd(n,n)=gcd(n,0)=ngcd(n,1)=1

欧几里得算法 可以用于在 O(logn) 的时间复杂度[1]内快速求出两个数的最大公约数。其基于如下的引理:

b0gcd(a,b)=gcd(b,rem(a,b))

欧几里得算法可以被描述为一个定义在 N2 上的状态机:

依据上面的引理,显然组成数对的两个数的最大公因数在状态转移过程中不会改变[2],因此该状态机是偏序正确的。考虑将状态机中的 y 作为状态机的一个派生变量。由于在每次转移中显然有 rem(x,y)<y 成立,该派生变量是严格递减的,因此该状态机必然会终止。由此我们证明了欧几里得算法的正确性。

裴蜀定理 是数论中的一条重要定理:

ab 的最大公约数 gcd(a,b)ab 的线性组合,即存在整数 pq 使得

gcd(a,b)=pa+qb

一列不全为零的整数 a1,a2,,an 的最大公约数 gcd(a1,a2,,an) 是该列数的线性组合,即存在 k1,k2,,kn 使得

gcd(a1,a2,,an)=i=1nkiai

基于整除的性质,很容易得出推论:一个整数 xab 的线性组合,当且仅当 gcd(a,b)x。同理其是一列数 a1,a2,,an 的线性组合,当且仅当gcd(a1,a2,,an)x

该定理可以通过拓展欧几里得算法证明。拓展欧几里得算法又称粉碎机,其不仅可以计算两个整数的最大公因数,还可以通过记录一些额外信息从而以与欧几里得算法相同的速度计算该最大公因数对应着何种线性组合。

粉碎机是一个定义在 N6 上的状态机:

该算法的终止性与计算 gcd(a,b) 的偏序正确性显然。下面详细叙述我们如何推导出该状态机的初始状态与转移规则与为什么这样的转移规则是正确的。

容易发现,欧几里得算法中的 xy 在转移过程中总可以表示成初始状态对应的 ab 的某种线性组合,这启示我们可以引入一些变量来记录这一信息。具体而言,我们令 x=sa+tby=ua+vb。初始状态下 x=1×a+0×by=0×a+1×b,从而得到状态机初始状态下 s=1t=0u=0v=1 。接下来考虑欧几里得算法的转移过程:

x=y=ua+vby=r=xqy=sa+tbq(ua+vb)=(squ)a+(tqv)b

从而得到了状态机的转移规则。与此同时新状态中的 xy 同样可以表示为 ab 的线性组合,显然当状态机停止时,gcd(a,b) 也可以表示为 ab 的线性组合,裴蜀定理得证。

为了验证这样的转移规则是偏序正确的,我们希望证明下面两条性质是保持不变式:

x=sa+tby=ua+vb

证明是显然的,此处略去。

粉碎机所得到的只是 gcd(a,b) 的一种线性组合表示。事实上,gcd(a,b) 对应无限多种线性组合,这允许当粉碎机给出的结果不符合我们的需要时,可以在此基础上轻而易举地得到新的线性组合。例如,设粉碎机得到的结果为 gcd(a,b)=sa+tb,一种简单的变换方法如下:

gcd(a,b)=(s+kb)a+(tka)b

式中 k 为任意正整数。该变换的正确性显然。

最大公因数还有如下性质:

与最大公因数对应的概念是 最小公倍数,记作 lcm(a,b)。关于最小公倍数只需记住一个重要结论为

gcd(a,b)×lcm(a,b)=ab

利用已经学到的关于线性组合与最大公约数的知识,我们将解决两个数论领域的经典问题:

例题一

现有两个无刻度的水桶与无限的水源,容积分别为 a 升与 b 升。允许执行如下操作:

  • 将一个水桶倒满水。
  • 将一个水桶倒空。
  • 将一个水桶中的水倒向另一个水桶,直至该水桶空或另一水桶满。

试判断对于任意的 c(0,min(a,b)],能否恰好得到 c 升水?若可以,给出操作方法。

例题二

现有点数为 ab 的牌若干,且 gcd(a,b)=1。试问是否存在一些无法由这些牌凑出的点数?

质数(Prime) 是大于 1 且只能被 1 与本身组成的数。其余的数称作 合数(Composite)。质数是数论的核心概念之一,现代数学有许多关于质数的未解之谜。质数在整数中的密度有着明确上界,且在逐渐减小。质数定理 表明,所有小于 n 的质数个数 π(n) 满足

limnπ(n)nlnn=1

数论领域有一个重要的定理为 唯一分解定理(Unique Factorization Theorem)

每个不为 1 的正整数都是一个唯一的弱递减质数序列的乘积。[3]

我们称 ab n 同余,当且仅 n(ab),记作 ab(modn)。根据同余的字面意思,很容易得出一个等价定义:ab(modn) 当且仅当 rem(a,n)=rem(b,n)。证明此处略去。

基于同余的定义,很容易得到同余关系与定义在 Z 上的相等关系具有相同的性质,具体而言,它们都是 等价关系。即具有:

以及一条很重要的推论:

arem(a,n)(modn)

基于这点,我们可以这样看待模 n 同余:它定义了一种将 Z 划分为 n 个集合的方式,这 n 个集合叫做 同余类剩余类[4]。可以证明同余运算与普通的代数运算十分相似,许多在普通代数运算中成立的性质在同余运算中同样满足。例如:

ab(modn)cd(modn),则 a+cb+d(modn),且 acbd(modn)

这表明,为了计算一些大数加减乘之后模 n 的值,可以考虑直接先将乘数与加数模 n,中间的运算结果一旦大于 n 之后也立刻模 n,从而降低了计算难度。

更确切地说,所有 [0,n) 内的整数与定义在该集合上的两种运算 +n×n [5]构成了 n 剩余类环,记作 Zn。在该系统中,我们所熟知的加法与乘法性质均成立,例如交换律、结合律、乘法对加法的分配律等。[6]

Zn 上,所有的同余关系可以直接化为等价关系,因此我们可以直接将上面的性质重新叙述为若 a=b (Zn)c=d (Zn),则 a+c=b+d (Zn)ac=bd (Zn)。这与普通的代数运算的性质别无二致,因此我们在计算大数的加减乘后求余运算时可以自由地将某些大于 n 的数模 n 化为较小的数,并利用在一般代数运算中的简便方法,同时不影响计算结果。

然而,同余运算与普通的代数运算在一点上存在显著差异:求逆与约去。我们定义一个数 x乘法逆 x1 满足 x×x1=1。下文将简称乘法逆为 倒数。在 R 上,每一个非零实数都有倒数;在 Z 上,仅有 11 有倒数,为各自本身;而在环 Zn 上,判定要稍微复杂一些。

我们称两个整数 互质,当且仅当两数没有共同的质约数,等价于 gcd(a,b)=1。显然 0 不与任何数互质,1 与任何非自身的数互质。一个数在环上是否存在倒数的判定定理如下:

kn 互质,当且仅当 kZn 上的倒数存在且唯一。

除此之外,我们通过举例也可以得知我们不能像在普通代数中一样随意约去两个同余数的因数。具体而言,我们称一个数 kZn 上是 可约的(Cancellable),当且仅当对 a,b[0,n)

kakb(modn)ab(modn)

可约的判定定理为:

kZn 上是可约的,当且仅当 kZn 上的倒数存在。

该结论是显然的,约去 k 等同于等式两边同乘其乘法逆。总而言之,k 是可约的,k 的倒数存在,kn 互质三条性质是互相等价的。我们记在 Zn 上与 n 互质的数组成集合 Zn。在实际运算中,我们希望 n 为质数,这能减少很多不必要的麻烦,因为显然此时 Zn=Zn,每一个环内的整数都有逆元。

欧拉 ϕ 函数 被定义为计算所有小于 n 且与 n 互质的非负整数个数[7],即

ϕ(n)[0,n) 中与 n 互质的数的个数

显然 ϕ(n)=|Zn|。设 p 是质数,ϕ(p)=p1。此外,对于 ϕ(pk),由于每 p 个数就有 1 个数不与 p 互质(p 的倍数),其余数均与 p 互质,容易得到 ϕ(pk)=pkpk1

欧拉函数是 积性函数,即对于任意互质的数 ab,有 ϕ(ab)=ϕ(a)ϕ(b)

为了证明该性质,我们需要首先介绍介绍另一条定理——中国剩余定理

mn 互质且大于 1,则对任意 ab,存在 x 是该线性同余方程组的解:

{xa(modm)xb(modn)

且该解在模 mn 意义下唯一。

更一般的形式是,设 m1,m2,,mk 是一列大于 1 且两两互质,令 p=imi,则对任意整数列 a1,a2,,ak,存在 x 是该线性同余方程组的解:

{xa1(modm1)xa2(modm2)xak(modmk)

且该解在模 p 意义下唯一。该解的构造方法如下:

另构造出一列数 s1,s2,,sk,其中 si=pmi,与这列数各自Zmi 上的倒数 ti。方程组的解

x=iaisiti (Zp)

积性函数的事实允许我们以相当简单的方法计算任何数的欧拉函数值。进一步地,搭配上唯一分解定理,我们可以得到欧拉函数的计算方法:

对任意整数 n,设 p1,p2,n 的所有互异的质约数

ϕ(n)=ni(11pi)

ϕ 函数与 欧拉定理 紧密相关,欧拉定理的内容为:

nk 互质,则 kϕ(n)1(modn)

该定理解决了任意模数下任意大指数的幂的计算问题,并可以引申出大量推论,例如 费马小定理

p 是质数且 pk,则 kp11(modp),或可等价为 kpk(modp)

费马小定理给出了当模数为质数时一种简便的求环 Zp 上每个数的倒数的方法,即计算 kp2modp

然而,欧拉定理仍然要求底数与模数互质,存在一定使用限制。我们可以考虑将其推广到底数与指数不互质的情形,从而处理任意模数下任意底数的幂次计算问题。先给出推论内容:

对任意 an,有

ak{ak,k<ϕ(n),arem(k,ϕ(n))+ϕ(n),kϕ(n),(modn)

从该推论出发很容易得到一条比较简单的推论:

对任意 an,有 ananϕ(n)(modn)

基于所学的数论知识,我们将分析数论的一大重要应用——密码学,具体来说,我们将研究 RSA 加密系统

RSA 加密系统是一种典型的 非对称 加密算法。其最大优势在于,在正式通信前,消息的接收方与发送方不必提前接触以提前对密钥作出约定,发送方仅需接收方所发布的公开信息就可以向接收方发送只有接收方可以解密的加密消息。做到这点依赖于被称作 单向陷门函数 (Trapdoor One-way Function) 的技术。这类函数就如同计算上的“二极管”一样,已知函数输入很容易得到输出,但从输出倒推输入是十分困难甚至是不可能的。具体到 RSA 上,它使用大质数的乘积与因式分解作为“二极管”,这基于如下猜想:

低效分解猜想:给定两个大质数的乘积 n=pq,不存在多项式时间内求解 pq 的算法。

目前已经能够证实我们可以以 O(n) 的时间复杂度将大质数的因式分解规约到大名鼎鼎的 NP 问题:SAT 问题上,因此低效分解猜想,本质上就是计算领域的著名问题——“P ?= NP",该问题至今仍未有明确答案。规约的过程简要说明如下:考虑设计一个简单的乘法检查器,其由具有 4k 位输入与 1 位输出,内部由具有 2k 位输出的乘法器与 2k 位输入,1 位输出的检查器连接组成,其中 kpq 的二进制表示的位数。我们向乘法器分别输入 xy,向检查器输入 n=pq,该电路会检查 n=xy 是否成立,并输出对应信号。由于数字电路可以被形式化为命题公式,我们取该电路的命题公式做 k 轮 SAT 测试,在第 i 轮中,将乘法器中输入 x 的第 i 位固定为 1,输入欲分解的数 n,并测试在该情况下该命题公式能否满足,测试结果无论如何都能确定该位的具体值,在 k 轮 SAT 测试后,其中一个因数就能够分解出来,从而因式分解 n 位大数就被规约到了 O(n) 次 SAT 测试上。

我们接下来详细讲一下 RSA 的工作流程:

通信开始前,信息的接收方需要创建两个密钥,一个为本地保密的 私钥,另一个为公开的 公钥。公钥与私钥通过如下流程生成:

  1. 通过具有高随机性的算法生成两个大质数 pq,通常有数百位长。
  2. 计算 N=pq
  3. 选择一个同样大的整数 e,且 gcd(e,ϕ(N))=1。显然 ϕ(N)=(p1)(q1)。二元组 (e,N) 即为公钥,可以对外公开发布。
  4. eZϕ(N) 上的倒数 d,为私钥,秘密保存。

发送方获取到公钥后,可以将其用于加密将要发送的信息。设 m[0,N) 为明文,加密方使用公钥加密该消息,得到密文

m^=me (ZN)

发送给接收方。

接收方接收到消息后,使用私钥解密该消息,得到明文

m=m^d (ZN)

我们首先证明该加解密方案是有效的,即假设传输无错时,接收方总能解密出发送方希望发送的原文,也即我们想要证明,对不等的两个质数 pq,设 N=pqde1(modϕ(N)),对任意 m[0,N)

(me)dm(modN)
  1. 该时间复杂度的严格证明见 14. 求和与渐进分析初步↩︎

  2. 更形式化的表述是,谓词 P((x,y))[gcd(x,y)=gcd(a,b)] 是一个保持不变式,其中 (a,b) 为起始状态。 ↩︎

  3. 对于 1,我们认为它是空序列的乘积。 ↩︎

  4. 关于剩余系的具体概念不在本课程要讨论的范围内,请参考初等数论教材。 ↩︎

  5. i+njrem(i+j,n)i×njrem(ij,n) ↩︎

  6. 关于群、环的具体概念不在本课程要讨论的范围内,请参考抽象代数教材。 ↩︎

  7. 由于 0 不与任何数互质,ϕ 也可等价定义为与 n 互质的正整数个数。ϕ(0) 一般无定义。 ↩︎