030 Primes and Greatest Common Divisors
Primes
定义 1 如果大于 1 的整数 只有两个因子 1 和 ,那么 是质数。大于 1 的非质数称为合数。
注意,1 不是质数,因为只有 1 一个因子。 是合数等价于存在一个 使得 。
定理 1 算术基本定理 每一个大于 1 的整数,要么是一个质数,要么能唯一的按照非递减序写成两个或者更多的质数之积。
Trial Division
定理 2 如果 是一个合数,那么存在一个质因数小于等于 。
证明:根据合数定义,存在一个 是 的因数,那么存在 使得 。反证法。假设 都大于 ,那么 ,矛盾,所以至少存在一个因数小于等于 。不妨设 ,如果 是质数,证明完成。如果 是合数,根据算术基本定理,那么存在一个小于 的质因数,证明完成。
根据定理 2,如果一个整数能够被小于等于它的所有质数整除,那么这个整数是质数。这个判断一个数是否是质数的方法称为试除法。
下面的过程可以用于找到一个整数的质因数。从最小的质数 2 开始使用各个质数试除 。如果 包含质因数,那么根据定理 2 存在一个不超过 的质数 能够整数 。如果找到到这样的 ,说明 是质数,结束整个过程;否则继续寻找 的质因数。注意, 不存在比 小的质因数,所以这里从 开始即可。
The Sieve of Eratosthenes
埃拉托斯特尼筛法用于找到所有不超过指定的某个整数的所有质数。从 2 开始,将比 2 大且能被 2 整除的数都删除。下一个没有被删除的数是质数,这里是 3,然后将比 3 大且能被 3 整除的数都删除。下一个没有被删除的数是质数,是 5。依次类推。
很早之前人们就意识到质数无穷多。给定前 小的质数 ,存在一个更大的质数不在此列。欧几里得就给出一个非常优雅的证明。
定理 3 存在无数个质数。
证明:反证法。假设只有有限多个质数 ,令 根据算术基本定理, 是质数或者是能分解成两个或多个质数的乘积。假定存在某个 ,那么 能被 整除,出现了矛盾,那么 都不能整除 。这时一定存在一个不在列表中的质数,这么质数要么是 要么是 的某个质因数。这与我们假定的有有限多个质数矛盾。
注意,整个证明过程并没有证明 是一个质数。我们给出的是非构造性的存在证明,只是说存在某个质数不在假定的列表中。
由于质数无限多,所以给定一个整数,一定存在一个大于它的质数。现在已知的最大的质数形式是 ,注意这里 是质数。这样形式的质数称为梅森素数(Mersenne primes
)。卢卡斯-莱默检验法(Lucas-Lehmer test
)可以快速检验这个形式的数是否是质数。不过没有其他同样快的算法能够检查其他形式的数是否是质数。
形式是 的数不是质数。分两种情况考虑。当 时,可以分解因式 ,当 时,也可以分解因式 。
质数有无限多,那么小于 的质数有多少个呢?
定理 4 质数定理 当 趋于无穷时,不超过 的质数个数 与 趋于 1。
所有已知的证明都比较复杂。
下表给出了 增大时,质数的个数以及与 的比值。
103 | 168 | 144.8 | 1.161 |
104 | 1229 | 1085.7 | 1.132 |
105 | 9592 | 8685.9 | 1.104 |
106 | 78,498 | 72,382.4 | 1.084 |
107 | 664,579 | 620,420.7 | 1.071 |
108 | 5,761,455 | 5,428,681.0 | 1.061 |
109 | 50,847,534 | 48,254,942.4 | 1.054 |
1010 | 455,052,512 | 434,294,481.9 | 1.048 |
2017 年,计算到了 得到比例是 。
应用质数定理可以知道随机的选择一个数是质数的概率是多大。如果我们只选择奇数的话,概率会大一倍。
试除法可以用于质因数分解和判断一个数是否是质数,但是效率很低。最新的判定一个数是否是质数的算法只需要一个数的比特位数的多项式时间就能判定,时间复杂度是 。
质因数分解仍旧没有找到多项式时间的算法。
每一个奇数在等差数列 其中一个。 属于 这个等差数列, 属于 这个等差数列。质数有无限多,这两个等差数列上的质数也是无限多的。那么任意等差数列 ,其中 互斥,呢?G. Lejeune Dirichlet 给出了证明,等差数列都包含无穷多的质数。其证明超过了本书的范围。不过 这两种特殊情况比较容易证明。
证明这两个特殊情况的方式类似。反证法。假设质数有限多 ,构造数 和 ,类似与证明定理2 的方式,可以得出新构造的数是质数,或者包含一个非 的因数是质数。
有没有一个等差数列,都是质数呢?1930 年 Paul Erdos 提出一个假设,给定任意大于 2 的整数 ,都有一个长度为 的等差数列,其每个数都是质数。 Ben Green 和 Terence Tao(陶哲轩)在 2006 年给出了证明。
Conjectures and Open Problems About Primes
数论中包含很多的猜想。
是否存在一个多项式 的系数都是整数,每个 都是质数呢?每个研究这个猜想的人都会遇到 这个多项式,但是当 时,其结果是合数。TODO 另一部分证明。See Exercise 23 in the Supplementary Exercises
哥德巴赫猜想(Goldbach's Conjecture
)是数论中最著名的猜想。哥德巴赫说每一个大于 5 的奇数,都能写成三个质数之和。欧拉说这个等价于每一个大于 2 的偶数,都能写成两个质数之和。
TODO 证明 Exercise 21 in the Supplementary Exercises
截止 2018 年,计算机检查了 以内的数都是正确的。陈景润在 1966 证明了一个质数和另一个数之和,后者要么是质数,要么是两个质数之积。
质数无限多个,那么形如 的质数是不是无限多呢?Henryk Iwaniec 在 1973 给出了最接近的证明,有无限多个形如 的数,要么是质数,要么是两个质数之积。
孪生素数猜想(The Twin Prime Conjecture
)是说是否存在无数多对数 都是质数。1966 年陈景润给出了最接近的证明,存在无限多对数, 是质数, 是质数或者两个质数之积。
令 表示命题存在无限多对质数对,其差值是 。孪生素数猜想是 为真。数学界在尝试证明一个更弱的命题,即存在某个上界 使得 为真。张益唐在 2013 年给出了证明,存在一个 使得 为真。包括陶哲轩在内的一个数学团队,利用他的方法,将上届降到了 246,并且证明利用这个方法上届可以缩小到 6。
Greatest Common Divisors and Least Common Multiples
定义 2 令 是不全为零的整数。 是满足 的最大整数,称为 的最大公约数,用 表示。
两个不全为零的整数的最大公约数一定存在,因为公约数集合不为空且有限。寻找最大公约数最朴素的方法就是列出 所有的因数,然后找到公共最大的一个。
定义 3 如果 最大公约数是 1,那么称 互斥。
定义 4 如果 ,那么 两两互斥。
另一个寻找最大公约数的方法是质数分解法。假定 其中指数是非负整数,那么 为了证明其正确性,我们需要证明两个方面:这个数能整除 且是所有整除 中最大的。由于质因数的次数没有超过 的次数,所有肯定能整除。由于任意质因数的次数增加,都无法同时被 整除,所以是最大公约数。
这个方法还能用于求最小公倍数。
定义 5 的最小公倍数是所有能够同时被 整除的数中最小的,用
的最小公倍数一定存在,因为公倍数集合非空,那么一定有最小值。利用质因数分解法可以得到最小公倍数 证明和最大公约数类似,明显地,这个数可以同时被 整除,同时如果质因数幂次较少一次,则无法被 或者 整除。
最小公倍数和最大公约数有如下关系:
定理 5 令 是正整数,那么
证明:通过质因数分解法证明。不是一般性,我们考察 的指数。不妨设 ,那么 , 的 的次数是 。 的 的次数是 ,类似的 的 次数是 ,对应幂次相等。
The Euclidean Algorithm
分解质因数法非常低效,因为分解质因数本身没有高效的算法。欧几里得就发明了辗转相除法,高效地求最大公约数。
引理 1 令 ,其中 都是整数。那么 。
证明:如果能证明 和 的公约数相同,那么必然最大公约数也相同。
假设 能整除 ,那么根据 4.1 节定理 1,得到 能整除 ,因此 的公约数也是 的公约数。
假设 能整除 ,那么 能整除 ,因此 的公约数也是 的公约数。
下面是欧几里得算法的描述,5.3 节会给出证明,该算法的时间复杂度是 ,前提是假定 。
procedure - gcd(a, b: positive integers)
x := a
y := b
while y != 0
r := x mod y
x := y
y := r
return x
gcds as Linear Combinations
定理 6 裴蜀定理(Bezout
)
如果 是正整数,那么存在整数 使得 。
也就是说, 可以表示为 的 整系数的线性组合。
定义 6 是正整数,使得 成立的整数 称为裴蜀系数,这个等式称为裴蜀等式。
TODO Exercise 36 in Section 5.2 and [Ro10] for proof
这里介绍两个求解的方法。第一个需要正向应用一遍欧几里得算法,然后反向处理一遍,具体参考下面的例子。第二个方法只需要正向一遍,被称为扩展欧几里得算法(extended Euclidean algorithm
)。
扩展欧几里得算法初始时令 ,迭代公式是 其中 , 是欧几里得算法中每一步的商。
TODO see Exercise 44 in Section 5.2, or see [Ro10]
例 使用第一种方法将 表示成 252 和 198 的线性组合。
首先使用欧几里得算法计算最大公约数。
使用表格总结这个过程就是 | | | | | | |--|--|--|--|--| | | | | | | | | | | | | | | | | | | | | | | | |
然后从倒数第二个式子开始倒着处理。可以将 表示为 下一行告诉我们 带入第一个式子得到 上表第一个式子告诉我们 代入之前的式子
例 使用扩展欧几里得算法将 表示成 252 和 198 的线性组合。
解:从上个例子可知,计算 时每次的商是 ,这里不再计算。令 ,应用 进行迭代。 所以 扩展欧几里得算法的计算过程可以总结为下表:
0 | 252 | 198 | 1 | 54 | 1 | 0 |
1 | 198 | 54 | 3 | 36 | 0 | 1 |
2 | 54 | 36 | 1 | 18 | 1 | −1 |
3 | 36 | 18 | 2 | 0 | −3 | 4 |
4 | 4 | −5 |
使用定理 6 可以部分证明算术基本定理,一个合数能做质因数分解,那么按照非递减序排列,结果是唯一的。
引理 2 如果 是正整数,并且 ,那么 。
证明:因为 ,根据 定理 6 有 两边同时乘以 根据 4.1 小节的定理一,由 得到 。显然 ,所有 。所以 。
下面的引理是上面引理的泛化形式。
引理 3 如果 是质数且 ,其中 是整数,那么对于某些 有 。
TODO The proof of Lemma 3 is left as Exercise 64 in Section 5.1
下面证明算术基本定理的唯一性。
证明(算术基本定理的唯一性):反证法。假定有至少两种不同的质因数分解方式:,其中 是质数且 。消除相同的质数后 其中 是正整数。两边没有相同的质数了。根据引理 2,一定存在某个 使得 能够 整除,但是两个质数不可能有整除关系,矛盾。所以质因数分解是唯一的。
4.1 节定理 5 是说两边同乘一个数,同余性质不变,但是不能随便同除一个数,不过可以同除一个与模数互质的数。
定理 7 令 是正整数, 是整数。如果 ,且 ,那么 。
证明:由 得到 ,根据引理 2 得到 ,所以 。