第九章:数论
数论是对整数的研究。
数论还提供了一个优秀的环境,使我们可以演练和应用在前面的章节中研究出来的理论证明技巧。
9.1 整除
定义9.1.1 :a整除b(表示为alb ),当且仅当存在整数k,使得 a k = b ak = b ak=b
根据定义9.1.1可以直接得到以下结论。对任意整数n:
n
∣
0
,
n
∣
n
,以及
±
1
∣
n
n | 0,n | n,以及±1|n
n∣0,n∣n,以及±1∣n
同样,
0
∣
n
I
M
P
L
I
E
S
n
=
0
0 | n IMPLIES n = 0
0∣nIMPLIESn=0
9.1.1 整除的性质
引理9.1.2:
- 若a | b且b | c,则a | c。
- 若a | b且a | c,则对所有的s和t,a | sb + tc 。
- 对所有c≠0,a | b当且仅当ca | cb。
证明第二个引理:
像sb+ tc这样的数被称为b和c的整数线性组合,或者简称为线性组合。
定义9.1.3:
整数n是整数b0,…, bi的线性组合,当且仅当存在整数So. … Sk,使得
9.1.2 不可整除问题
定理9.1.4:[除法定理] 令n和d为整数,其中d ≠0。则存在唯一的整数对q和r,使得
n
=
q
⋅
d
+
r
且
0
≤
r
<
∣
d
∣
n = q ·d +r且0≤r < |d|
n=q⋅d+r且0≤r<∣d∣
数q和数r分别被称为n除以d时的商和余数,用 q c n t ( n , d ) qcnt(n, d) qcnt(n,d)表示商,用 r e m ( n , d ) rem(n, d) rem(n,d)表示余数。
定义9.1.5: 对任意实数r,r的绝对值|r|定义为:
可以用括号表示区间:
9.1.3 虎胆龙威
通过对 a , b ( 假设 b > a ) a,b(假设b>a) a,b(假设b>a)两个水壶的操作,我们发现如下引理:
引理9.1.6:(水壶问题)在6.2.3节介绍的《虎胆龙威》状态机中,若水壶的容积分别为a和b,则每一个壶中的水的总量总是a和b的线性组合。
证明:归纳假设P(n)是这样一个命题,即经过n次转移,每一个壶中的水的总量是a和b 的线性组合。
9.2 最大公约数
α和b的公约数是指能够同时整除它们的数。 a和b的最大公约数( greatest common divisor)写作gcd(a,b)。
注: g c d ( n , 0 ) = 0 gcd(n,0) = 0 gcd(n,0)=0 该等式源于任何数都能整除0这一事实。
9.2.1 欧几里得算法
引理9.2.1:若b≠0
g
c
d
(
a
,
b
)
=
g
c
d
(
b
;
r
e
m
(
a
,
b
)
)
gcd(a,b) = gcd(b; rem(a, b))
gcd(a,b)=gcd(b;rem(a,b))
26和21使用欧几里得算法得到
g
c
d
(
26
,
21
)
=
g
c
d
(
21
,
5
)
=
g
c
d
(
5
,
1
)
=
1
gcd(26,21) = gcd(21,5) = gcd(5,1) = 1
gcd(26,21)=gcd(21,5)=gcd(5,1)=1
因此,我们无法使用上面的推理来排除布鲁斯在大壶中灌入3加仑水的可能性。事实上,由于最大公约数是1,布鲁斯能够向大罐子中灌入不超过其容量的任意加仑的水。我们需要更多的数论知识来解释这一点。
欧几里得算法状态机
欧几里得算法可以很容易地被形式化为一个状态机,其状态集合是N2并存在一条转移规则:
(
x
,
y
)
→
(
y
,
r
e
m
(
x
,
y
)
)
(x, y) → (y , rem(x, y))
(x,y)→(y,rem(x,y))
gcd(x,y)是改状态机上的一个不变量。如果y变成0,不变量仍为真,且有
X
=
g
c
d
(
x
,
0
)
=
g
c
d
(
a
,
b
)
X=gcd(x , 0)=gcd(a, b)
X=gcd(x,0)=gcd(a,b)
即x的值就是我们想要的最大公约数。
欧几里得算法在最多1+2loga次会停止。
9.2.2 粉碎机
定理9.2.2:a和b的最大公约数是α和b的线性组合,即存在整数s和t使得
g
c
d
(
a
,
b
)
=
s
a
+
t
b
gcd(a, b) = sa + tb
gcd(a,b)=sa+tb
推论9.2.3:一个整数是a和b的线性组合,当且仅当它是gcd(a,b)的倍数。
粉碎机会经历相同的步骤,但是需要在过程中做一些额外的记录:当计算gcd(a,b)时,我们记录如何将每一个余数(如例子中的49、21和7)写作a和 b的线性组合。这么做是值得的,因为我们的目标是将最后的非零余数,即最大公约数,写成一个这样的线性组合。例如,此处需要额外记录的信息如下:
推论9.2.4:假设我们有容量为a和b的水壶,则每一个壶中的水的总量始终是gcd(a,b)的倍数。
9.2.3:水壶问题的通解
推论9.2.3说明3可以被写作21和26的线性组合,因为3是gcd(21,26)= 1的倍数。因此,粉碎机能够提供满足如下条件的s和t :
3
=
s
﹒
21
+
t
⋅
26
3 =s﹒21+t·26
3=s﹒21+t⋅26
系数s既可能是正数也可能是负数。然而,我们可以容易地将这个线性组合转变为如下等价的线性组合
3
=
s
′
⋅
21
+
t
′
⋅
26
3 = s'· 21+t'·26
3=s′⋅21+t′⋅26
其中s‘是正数,可由上面的式子s = s + 26 且 t = t - 21 变化的来。
由此,我们便可得到该问题的通解为:
定理9.2.5:假设我们有容量为a和b的水壶。对任意c ∈ [0…a],当且仅当c是α和b的最大公约数的倍数时,才可能得到c加仑的水。
9.2.4 最大公约数的性质
引理 9.2.6
9.3 质数的奥秘
定义9.3.1:质数( prime)是大于1,且只能被其本身和1所整除的数。除0、1和-1之外的非质数称为合数( composite )。
质数在整数中的密度是有精确的上界的,这是关于质数的最重要的认识之一。也就是说,令T(n)表示直到n的质数的个数
定义9.3.2
一步一步地,π随着两个质数间的不规则间隔而不规律地增长,但它的总体增长率被认为在经过平滑后,与函数n/ ln n的增长率一致。
定理9.3.3(质数定理)
因此,质数是逐渐减少的。根据经验法则,在n附近区域的Inn个整数中大约会有1个质数。
定理9.3.4(契比雪夫质数密度定理)对n > 1,
9.4 算数的基本定理
当数列中的每一个数至少与其后面的数一样大时,这个数列是弱递减的。注意,根据这个定义,只包含一个数的数列,以及不包含数的序列(空数列)都是弱递减的。
定理9.4.1 :[算术基本定理]每一个正整数都是一个唯一的弱递减质数序列的乘积。
例: 12 = 3 ⋅ 2 ⋅ 2 例: 12 = 3 · 2 · 2 例:12=3⋅2⋅2
9.4.1 唯一分解定理的证明
引理9.4.2:若p是质数且p | ab,则p |a或p | b。
证明:
一种情况是,若gcd(a,p) = p,则引理成立,因为a是p的倍数。
除此之外,gcd(a,p)≠p。在这种情况下,gcd(a,p)必须为1,因为只有1和p是p的正约数。又因为gcd(a,p)是a和p的线性组合,我们有1= sa + tp对某些s和t成立。那么b = s(ab)+(tb)p,也就是说,b是ab和p的线性组合。既然p同时能整除ab和p,它也能够整除它们的线性组合bo
引理9.4.3 :令p为质数。若p l a1a2···an,则p能整除某些ai 。
算数的基本定理的证明
利用良序原则,定理2.3.1表明每一个正整数都能被表示为质数的乘积。因此我们只需要证明这个表达式是唯一的。我们同样使用良序原则来证明这一点。
使用反证法来进行证明:假设,与定理相反,存在可以用不止一种方式来写成质数乘积的整数。根据良序原则,存在一个满足这一性质的最小的整数。称这个整数为n,并令:
其中两个乘积都是弱递减顺序的,并且p1≤q1。
- 若q1=p1,则n/q1也可以被表示成不同的弱递减质数序列的乘积,
即:
既然n/q1<n,这不可能为真,因此我们可以得到结论p1<q1。
- 因为 p i p_i pi是弱递减的,所有的 p i p_i pi都小于q1。但是,
因此根据引理9.4.3,q整除某个pi,这与q大于它们这一事实相矛盾。
9.5 阿兰 · 图灵
9.5.1图灵编码(1.0版)
图灵编码的第一个挑战是,将一条文本消息转换成一个整数,这样我们就可以对它进行数学运算。
可以采用这种方法:将消息中的每一个字母替换为两位数字(A=01,B = 02,C= 03等)并将所有的数字串联起来形成一个庞大的数字。
例:
第二,图灵编码要求消息是质数,因此我们可能需要用一些数字来填充这个结果,从而得到一个质数。质数定理表明,使用较少的几个数字来填充就可以了。在这种情况下,附加数字13就会得到质数2209032015182513。
下面就是加密过程的工作原理:在下面的描述中,m是我们想保密的未加密的消息,m是纳粹军队可能拦截的加密后的消息,而k是密钥。
- 事先:发送方和接收方对密钥达成一致,密钥是一个大质数k。
- 加密:发送方加密消息m时计算:
- 解密:接收方解密m时计算:
例:假设密钥是质数k = 22801763489并且消息m是“victory”。那么加密消息是:
图灵编码真的安全吗?
拦截方只能看到加密后的消息m= m·k,因此恢复原始消息需要分解m。尽管付出了巨大的努力,人们还没有发现真正高效的分解算法。实际上,图灵编码应用了他自己的一项发现,即计算能力是有限的。因此,当m和k足够大时,拦截方似乎就没那么好运了!
这些听起来都很有前景的样子,但图灵编码其实有一个重大缺陷。
9.5.2破解图灵编码(1.0版)
当使用相同的密匙,传递两条消息时,
两条加密消息 m 1 ^ \widehat{m_1} m1 和 m 2 ^ \widehat{m_2} m2 的最大公约数就是密钥k。并且,正如我们所见,两个数的最大公约数可以非常高效地计算出来。因此,在发送第二条消息之后,拦截方就能恢复出密钥并读取每一条消息!
9.6 模运算
高斯认为,a和b是模n ( mod n)同余的,当且仅当n| (a-b)。这可写作:
引理9.6.1(余数)
余数引理9.6.1解释了为什么同余关系有着和相等关系一样的性质。特别是,下面这些性质是直接可得的。
我们将经常用到余数定理9.6.1的另一个直接推论:
推论9.6.3
下一个关于同余的最有用的事实是,它们在加法和乘法中保持不变。
9.7 余运算
例:计算如下的取余运算
第一步,整型指数给出的是一系列的乘法,根据通用法则,我们可以将这些相乘的数替换为它们的余数。得到如下的式子:
第二步,在对一个数的若干次幂进行求余运算时,在进行若干次后,就会出现一定的规律。如:
因此可进行如下运算:
注意:注意,用余数来代替指数将会是一个灾难性的错误。通用法则适用于加法和乘法的操作数,而指数是用来控制进行多少次乘法运算的。一定要当心这一点。
9.7.1: 环 Z n Z_n Zn
定义 + n +_n +n符号:它被用来先计算一次加法,再计算加法的和除以n的余数。对乘法也有类似的定义。
引理 9.7.1
在[0…n)范围内的整数以及 + n +_n +n和 ⋅ n ·_n ⋅n运算被称为模n整数环,表示为 Z n Z_n Zn。作为引理9.7.1的延伸,熟悉的运算规则在 Z n Z_n Zn中成立。
下面所有的等式在 Z n Z_n Zn中为真:
总的主题是,余数运算和普通运算很像。但我们将会检查几个意外情况。
9.8 图灵编码(2.0版)
2.0版本的图灵编码没有使用传统的运算,而是使用了模运算。
事先:发送方和接收方对一个大数n取得一致,这个数可以公开。这将是我们所有运算中的模数。与1.0版一样,它们也对一个质数k <n取得一致,即密钥
加密:与1.0版本一样,消息m必须是[0…n)中的另一个质数。发送方通过计算mk来将消息m加密,得到 m ^ \widehat{m} m ,但这一次还需要模n:
解密:解密步骤是一个难点。我们可能还希望和之前一样,通过将加密消息 m ^ \widehat{m} m 除以密钥k来解密。而难点在于, m ^ \widehat{m} m 是mk除以n的余数。所以将 m ^ \widehat{m} m 除以k,可能甚至得不到一个整数!
9.9 倒数与约去
一个数x的乘法逆,是 x − 1 x^{-1} x−1,使得 x − 1 x^{-1} x−1·x = 1
我们可以用倒数来代指乘法逆。
事实上,除了唯一的例外0,每一个有理数n/m都有一个倒数,即m/n。而另一方面,在整数范围中,只有1和-1有倒数。而在环 Z n Z_n Zn内,事情就变得有点复杂了。例如,2是8在 Z 15 Z_{15} Z15上的倒数,因为
另一方面,3在 Z 15 Z_{15} Z15上没有倒数。
9.9.1 互质
没有共同的质约数的整数被称为互质。这与没有大于1的公约数(不论是否为质数)等价。这也相当于说gcd(a, b) = 1。
引理9.9.1:若k ∈ [0…n)与n互质,则k有 Z n Z_n Zn上的倒数。
证明:如果k与n互质,则根据最大公约数的定义有gcd(k,n)= 1。这意味着我们可以利用9.2.2节中的粉碎机来找到n和k的一个等于1的线性组合:
因此,利用余数运算的通用法则(引理9.7.1),我们得到
引理9.9.2:若i和j都是k在 Z n Z_n Zn上的倒数,则i =j。
在这里使用质数的模是很有吸引力的,因为和有理数与实数一样,当p是质数时,每一个非零数都有一个在 Z p Z_p Zp上的倒数。
9.9.2 约去
一般而言,约去在Zn上不是永真的( valid )。例如,
而约去3会得出10等于5这样荒谬的结论。
不能约去乘法项,是Zn运算与一般整数运算之间最显著的差异。
定义9.9.3一个数k在 Z n Z_n Zn上是可约的( cancellable ),当且仅当,对所有a,b e [0…n),
引理9.9.4: 若k在Z,中有一个倒数,则它是可约的。
定理9.9.5: 对k ∈[0…n),下面的式子等价:
9.9.3 解密(2.0版)
倒数是破解图灵编码的关键。具体来说就是,将加密消息乘以密钥的Z倒数j,可以恢复出原始消息:
因为k,n都为质数,所以k关于Zn肯定有倒数,可以通过粉碎机求出。
9.9.4破解图灵编码(2.0版)
如果我们已知明文m和密文 m ^ \widehat{m} m ,如何去求他的密匙k呢?
求法:
由于m是小于质数n的正数,纳粹可以利用粉碎机找到m的Z,倒数j。于是
9.10 欧拉定理
定义9.10.1:对n >0,定义:
函数 ϕ \phi ϕ被称为欧拉 ϕ \phi ϕ函数。
更一般地,若p是质数,则 ϕ \phi ϕ§= p-1,因为[0…p)中的每个正数都与p互质。然而,当n是合数时,情况就变得有点复杂。
定理(欧拉定理,Euler’s Theorem) .若n与k互质,则
定义9.10.2:令 Z n ∗ Z_n^* Zn∗为(0…n)中与n互质的整数:
则有:
定理9.10.3:( Z n Z_n Zn上的欧拉定理).对所有k∈ Z n ∗ Z_n^* Zn∗
引理 9.10.4:
定义9.10.5 :对 Z n Z_n Zn的任意元素k和子集s,令
引理 9.10.6:若k ∈ Z n ∗ Z_n^* Zn∗且S⊆ Z n ∗ Z_n^* Zn∗,则
推论9.10.7: 若k ∈
Z
n
∗
Z_n^*
Zn∗,则
k
Z
n
∗
=
Z
n
∗
kZ_n^* = Z_n^*
kZn∗=Zn∗
现在,我们可以完成对欧拉 Z n Z_n Zn定理9.10.3的证明。
费马小定理
费马小定理是欧拉定理的一个著名特例。
推论9.10.8(费马小定理,Fermat’s Little Theorem)假设p是质数并且k不是p的倍数。则
9.10.1 计算欧拉 ϕ \phi ϕ函数
引理9.10.9
对质数p ≠q成立。
证明:
由于p和q是质数,任何不与pq互质的数必须是p或q的倍数。在[0…pq)上的所有pq个数中,恰好存在q个p的倍数和p个q的倍数。因为p和q互质,[0…pq)唯.一的p和q的公倍数是0。因此在[0…pq)上,有p +q-1个数不与n互质。这意味着
定理9.10.10:
例:
推论9.10.11:对任意数n,若p1, p2,…,pj是n的(不同的)质数约数,则
9.11 RSA公钥加密
相比于传统的加密方法,RSA有一个主要的优势:加密消息的发送方和接收方不必提前接触,来对密钥取得一致。相反,接收方既有一个他们密切守护的私钥( private key),也有一个他们尽可能广泛分发出去的公钥( private key )。希望向接收方发送秘密消息的发送方,利用接收方广泛分发的公钥来加密他们的消息。然后,接收方可以用他们秘密持有的私钥来解密收到的消息。
9.12 SAT与RSA的关系
RSA可行的原因:两个质数的相乘很快,但分解两个质数的乘积似乎是极其吃力的。
如果 SAT可以在多项式时间内解决,那么质数分解也一样,于是 RSA将很“容易”破解。
书上那个电路的例子没咋看懂