要点:素数无穷,素数分布(素数定理),唯一分解定理,最大公因子,欧几里得算法,整数分解,费马数,丢番图方程。
尽管数学家做了几百年的努力,仍有关于素数的许多问题未被解决。
在数论中常常研究具有特殊形式的数。本章中,我们将介绍 费马数 ,即形如 2 n + 1 2^n+1 2n+1 的整数。(费马猜想它们都是素数,但是这被证明是不对的)。
最后,我们将介绍 丢番图方程,它是只考虑整数解的方程。
我们将证明如何用最大公因子来帮助求解 线性丢番图方程。
与其他丢番图方程不同,线性丢番图方程能够容易地系统解决。
定义:素数是大于 1 1 1 的正整数,并且除了 1 1 1 和它本身外不能被其他正整数所整除。
定义:大于 1 1 1 的不是素数的正整数称为合数。
本节将讨论 给定正整数集中素数的分布 并 证明该分布的一些基础性质 。同时还将讨论关于素数分布的一些更强的结论。
在我们将要介绍的定理中包含了数论中一些最著名的结论。
「素数的无限性」:我们从证明有无穷多个素数开始,为此需要下面的引理。
我们将在本章的后面介绍一些证明素数无穷性的其他方法。(见这一节末尾的习题8以及3.3、3.5和3.6节的习题)。
引理3.1:每个大于 1 1 1 的正整数都有一个素因子。
证明:反证法。假设存在一个大于 1 的正整数没有素因子,那么大于 1 且没有素因子的正整数构成的集合非空,由良序性知集合中存在一个大于 1 且没有素因子的最小正整数 n n n 。由于 n n n 能被 n n n 整除且 n n n 没有素因子,因此 n n n 不是素数。于是 n n n 可以写成 n = a × b n=a\times b n=a×b ,其中 1 < a < n 11<a<n , 1 < b < n 11<b<n 。因为 a < n a
定理3.1:存在无穷多个素数。
证明:假设只有有限个素数 p 1 , p 2 , ⋯ , p n p_1,p_2,\cdots,p_n p1,p2,⋯,pn ,其中 n n n 是正整数,考虑整数 Q n = p 1 p 2 ⋯ p n + 1 Q_n=p_1p_2\cdots p_n+1 Qn=p1p2⋯pn+1 。由引理 3.1, Q n Q_n Qn 至少有一个素因子,设为 q q q 。如果 q = p j q=p_j q=pj ,其中 j j j 为某个整数且 1 ≤ j ≤ n 1\le j\le n 1≤j≤n 。由于 Q n − p 1 p 2 ⋯ p n = 1 Q_n-p_1p_2\cdots p_n=1 Qn−p1p2⋯pn=1 ,且 q q q 可以整除 Q n Q_n Qn, p 1 p 2 ⋯ p n p_1p_2\cdots p_n p1p2⋯pn ,因此由定理 1.9, q ∣ 1 q\mid 1 q∣1 。这显然是不可能的,因为 1 不能被任何素数整除。于是 q q q 不是 p j p_j pj 的任何一个。这与假设矛盾。
证毕。 ■ \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare ■
定理 3.1 的证明过程不是构造性的,因为我们在证明中构造的整数 Q n Q_n Qn(由前 n n n 个素数的积加 1 得到)可以是素数也可以不是(见习题11)。因此,在证明过程中我们只是知道存在一个新的素数但是并没有求得它。
求素数:在下面的章节中,我们将把兴趣放在 如何求大素数 和 使用大素数 上。
将素数和合数加以区分的测试是至关重要的,这种测试叫做 素性检验。最基本的素性检验是「试除法」。
bool is_prime()
{
for(int i = 2; i <= sqrt(n); i++) {
if(n % i == 0)
return false;
}
return true;
}
定理3.2:如果 n n n 是一个合数,那么 n n n 一定有一个不超过 n \sqrt{n} n 的素因子。
证明:既然 n n n 是合数,那么 n n n 可以写成 n = a × b n=a\times b n=a×b,其中 a, b 为整数且 1 < a ≤ b < n 11<a≤b<n 。
我们一定有 a ≤ n a\le \sqrt{n} a≤n ,否则若 b ≥ a > n b\ge a>\sqrt{n} b≥a>n,那么有 a × b > n × n = n a\times b>\sqrt{n}\times\sqrt{n}=n a×b>n×n=n 。由引理3.1, a a a 至少有一个素因子,再由定理1.8, a a a 的因子一定也是 n n n 的因子,显然这个因子小于等于 n \sqrt{n} n 。
证毕。 ■ \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare ■
给定一个正整数 n n n ,使用定理 3.2 可以找到所有小于等于 n n n 的素数。这种方法就是「埃拉托色尼斯筛法」。
int primes[1000], cnt;
bool is_prime[1000];
for(int i = 2; i <= n; i++)
{
if(is_primes[i]) continue;
primes[++cnt] = i;
if(i <= sqrt(n))
{ // 使用小于等于sqrt(n)的所有质数即可
for(int j = i * i; j <= n; j += i)
is_primes[j] = true;
}
}
对于一个特定的整数 n n n ,我们将在后面给出一个更好的方法来判断一个整数是否是素数,即定理 6.11。
定理3.3(狄利克雷关于「等差数列中素数的定理」):假设 a , b a,b a,b 是互素的整数,那么等差数列 a n + b ( n = 1 , 2 , 3 , ⋯ ) an+b\ (n=1,2,3,\cdots) an+b (n=1,2,3,⋯) 包含了无穷多的素数。
已知的最大素数:在近千百年的历史中,数学家和一些数学爱好者们总是试图找到一个比已知的最大素数更大的素数。一个人会因为找到这样的素数而至少在当时一举成名,并且他或她的名字也将被载入史册。因为有无穷多的素数,因而总有素数比当时的已知最大素数要大。寻找新素数也有一些系统化的方法。人们并不是随机挑选一些数来检验其是否为素数,而是选取一些特殊形式的数。例如,我们将在第7章中讨论具有 2 p − 1 2^p-1 2p−1 形式的素数,其中是 p p p 素数;这种数被称为 梅森素数(Mersenne primes)。我们将看到用一种特殊的测试可以检验出 2 p − 1 2^p-1 2p−1 是否为素数,而不需要用试除法。过去几百年中多数时间里最大的素数一直是梅森素数。目前已知的最大素数的世界纪录是 2 43 112 609 − 1 2^{43\ 112\ 609}-1 243 112 609−1 。
如果没有一个实用的公式可以产生大素数,那么怎么才能生成它们呢?在第6章中将介绍如何用概率素性检验法来生成大素数。
在 广义黎曼猜想 成立的条件下,米勒(G. L. Miller)于1975年给出了一个可用 O ( ( log n ) 5 ) O((\log{n})^5) O((logn)5) 次位运算来证明一个整数是素数的算法。但可惜的是,广义黎曼猜想到现在尚未被证明。
★ \bigstar ★ 由于广义黎曼猜想并没有被证明,其后由Michael O. Rabin教授作出修改,提出了不依赖于该假设的 随机化算法。
在1983年,Leonard Adleman、Carl Pomerance和Robert Rumely建立了一个计算复杂度为 ( log n ) c log log log n (\log n)^{c\ \log\log\log{n}} (logn)c logloglogn 的算法,其中 c c c 是常数。
虽然他们的算法不是 多项式时间 ,但是它已经接近多项式时间了,因为 log log log n \log\log\log{n} logloglogn 增长得非常慢。
使用他们的算法结合现在的计算机确定一个100位的整数是否为素数只需几毫秒,确定一个400位的整数是否为素数用时不超过 1 秒,而确定一个1000位的整数是否为素数用时少于一个小时。
素性验证的多项式时间算法
在18世纪后期,数学家们通过手算建立了素数表。通过这些数值,他们开始寻找函数来估计 π ( x ) \pi(x) π(x) 。
定义:函数 π ( x ) \pi(x) π(x) 表示不超过 x x x 的素数的个数,其中 x x x 是正实数。
定理3.4(素数定理):随着 x x x 的无限增长, π ( x ) \pi(x) π(x) 和 x ln x \dfrac{x}{\ln{x}} lnxx 的比趋于 1 1 1。
如果用极限的语言来表述,我们有 lim x → ∞ π ( x ) ( x / ln x ) = 1 \lim\limits_{x \to \infty} \dfrac{\pi(x)}{(x/\ln x)}=1 x→∞lim(x/lnx)π(x)=1。
用一个简单的方法来表述素数定理是写成 π ( x ) ∽ x ln x \pi(x)\backsim\dfrac{x}{\ln{x}} π(x)∽lnxx。这里符号 ∽ \backsim ∽ 表示渐进于。
推论3.4.1:令 p n p_n pn 是第 n n n 个素数,其中 n n n 是正整数,那么 p n ∽ n log n p_n\backsim n\log n pn∽nlogn ,即第 n n n 个素数渐进于 log n \log{n} logn 。
如果随机地选择一个正整数,那么它是素数的概率有多大呢?
定理3.5:对于任意的正整数 n n n,存在至少 n n n 个连续的正合数。
证明:
定理3.6 : a , b a,b a,b 是整数,且 ( a , b ) = d (a,b)=d (a,b)=d ,那么 ( a d , b d ) = 1 (\dfrac{a}{d},\dfrac{b}{d})=1 (da,db)=1 。(换言之, a / d a/d a/d 与 b / d b/d b/d 互素)。
证明:假设还有其他正整数 e e e 使得 e ∣ ( a / d ) e\mid (a/d) e∣(a/d) 且 e ∣ ( b / d ) e\mid (b/d) e∣(b/d) ,那么存在整数 k k k 和 l l l 使得 a / d = k e a/d=ke a/d=ke , b / d = l e b/d=le b/d=le ,于是 a = d k e a=dke a=dke , b = d l e b=dle b=dle 。因此 d e de de 是 a , b a,b a,b 的公因子。因为 d d d 是 a , b a,b a,b 的最大公因子,故 d e ⩽ d de\leqslant d de⩽d ,于是 e = 1 e=1 e=1 。因此 ( a d , b d ) = 1 (\dfrac{a}{d},\dfrac{b}{d})=1 (da,db)=1 。
如果 ( p , q ) = 1 (p\ ,q)=1 (p ,q)=1 ,则分数 p / q p/q p/q 被称为既约分数。
下面的推论告诉我们每一个分数都与另一个既约分数相等。
推论3.6.1:如果 a , b a,b a,b 为整数,且 b ≠ 0 b\neq 0 b=0 ,则 a b = p q \dfrac{a}{b}=\dfrac{p}{q} ba=qp ,其中 p , q p,q p,q 为整数,且 ( p , q ) = 1 , q ≠ 0 (p,q)=1,q\neq 0 (p,q)=1,q=0 。
证明:假设 a , b a,b a,b 为整数且 b ≠ 0 b\ne 0 b=0 ,令 p = a / d p=a/d p=a/d , q = b / d q=b/d q=b/d ,其中 d = ( a , b ) d=(a,b) d=(a,b) ,则 p / q = ( a / d ) / ( b / d ) p/q=(a/d)/(b/d) p/q=(a/d)/(b/d) 。由定理 3.6 可知 ( p , q ) = 1 (p,q)=1 (p,q)=1 。
定理3.7:令 a , b , c a,b,c a,b,c 是整数,那么 ( a , b ) = ( a + c b , b ) (a,b)=(a+cb,b) (a,b)=(a+cb,b) 。
证明:令 e e e 是 a , b a,b a,b 的公因子,由定理 1.9 可知 e ∣ a + c b e\mid a+cb e∣a+cb ,所以 e e e 是 a + c b a+cb a+cb 和 b b b 的公因子。如果 f f f 是 a + c b a+cb a+cb 和 b b b 的公因子,那么由定理 1.9 可知 f f f 整除 ( a + c b ) − c b = a (a+cb)-cb=a (a+cb)−cb=a ,所以 f f f 是 a , b a,b a,b 的公因子。即 a , b a,b a,b 的公因子与 a + c b , b a+cb,b a+cb,b 的公因子相同。因此 ( a + c b , b ) = ( a , b ) (a+cb,b)=(a,b) (a+cb,b)=(a,b) 。
定义:如果 a , b a,b a,b 是整数,那么它们的 线性组合 具有形式 m a + n b ma+nb ma+nb ,其中 m , n m,n m,n 都是整数。
定理3.8:两个不全为零的整数 a , b a,b a,b 的最大公因子是 a , b a,b a,b 的线性组合中 最小 的正整数。
证明: 令 d d d 是 a , b a,b a,b 的线性组合中最小的正整数。(因为当 a ≠ 0 a\neq 0 a=0 时,两个线性组合 1 × a + 0 × b 1\times a+0\times b 1×a+0×b 和 0 × a + 1 × b 0\times a+1\times b 0×a+1×b 中必有一个为正,因此根据良序性,存在最小的正整数)。
我们有 d = m a + n b d=ma+nb d=ma+nb ,其中 m , n m,n m,n 是整数 。 \qquad\qquad (1)
我们先证明 d ∣ a d\mid a d∣a , d ∣ b d\mid b d∣b 。
由带余除法,得到 a = d q + r a=dq+r a=dq+r, 0 ≤ r < d 0\le r
接下来证明它是 a , b a,b a,b 的最大公因子。为此只需证明 a , b a,b a,b 所有的公因子 c c c 都可整除 d d d 。
由于 d = m a + n b d=ma+nb d=ma+nb ,因此如果 c ∣ a c\mid a c∣a 且 c ∣ b c\mid b c∣b ,那么由定理 1.9 有 c ∣ d c\mid d c∣d ,因此 d ≥ c d\ge c d≥c 。
证毕。 ■ \qquad \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare ■
推论3.8.1(Bezout,贝祖定理):如果 a , b a,b a,b 均为整数,则有整数 m , n m,n m,n ,使得 m a + n b = gcd ( a , b ) ma+nb=\gcd(a,b) ma+nb=gcd(a,b) 。
虽然该推论被称作是 Bezout 定理,但多年以前 Claude Gaspar Bachet 已经证明了该结果。
方程 m a + n b = ( a , b ) ma+nb=(a,b) ma+nb=(a,b) 被称为 Bezout 等式,对给定的整数 a , b a,b a,b 满足该等式的整数 m , n m,n m,n 被称为是 a , b a,b a,b 的 Bezout 系数或 Bezout 数。
推论3.8.2:整数 a , b a,b a,b 互素当且仅当存在整数 m , n m,n m,n 使得 m a + n b = 1 ma+nb=1 ma+nb=1 。(充要条件的证明)
证明:若 ( a , b ) = 1 (a,b)=1 (a,b)=1 。由定理 3.8 可知,1 是 a , b a,b a,b 的线性组合的最小正整数。于是存在整数 m , n m,n m,n 使得 m a + n b = 1 ma+nb=1 ma+nb=1 。反之,如果有整数 m , n m,n m,n 使得 m a + n b = 1 ma+nb=1 ma+nb=1 ,则由定理 3.8 可得 ( a , b ) = 1 (a,b)=1 (a,b)=1 。这是由于 a , b a,b a,b 不为 0 且 1 显然是 a , b a,b a,b 的线性组合中的最小正整数。
定理3.9:如果 a , b a,\ b a, b 是正整数,那么所有 a , b a,\ b a, b 的线性组合构成的集合与所有 ( a , b ) (a,\ b) (a, b) 的倍数构成的集合相同。
证明: 假设 d = ( a , b ) d=(a,\ b) d=(a, b) ,
我们首先证明每个 a , b a,b a,b 的线性组合是 d d d 的倍数。
我们现在证明每一个 d d d 的倍数也是 a , b a,b a,b 的线性组合。
证毕。 ■ \qquad \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare ■
不依赖于整数的有序性定义最大公因子。
定理3.10:如果 a , b a,b a,b 是不全为 0 0 0 的整数,那么正整数 d d d 是 a , b a,b a,b 的最大公因子,当且仅当
\qquad\qquad (i) d ∣ a d\mid a d∣a 且 d ∣ b d\mid b d∣b;
\qquad\qquad (ii) 如果 c c c 是整数且 c ∣ a c\mid a c∣a , c ∣ b c\mid b c∣b ,那么 c ∣ d c\mid d c∣d;
证明: \qquad 假设 d = ( a , b ) d=(a,b) d=(a,b) ,
证毕。 ■ \qquad \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare ■
定义:令 a 1 , a 2 , a 3 , … , a n a_1,a_2,a_3,\dots,a_n a1,a2,a3,…,an 是不全为零的整数。这些整数的公因子中最大的整数就是最大公因子。 a 1 , a 2 , a 3 , … , a n a_1,a_2,a_3,\dots,a_n a1,a2,a3,…,an 的最大公因子记为 ( a 1 , a 2 , a 3 , … , a n ) (a_1,a_2,a_3,\dots,a_n) (a1,a2,a3,…,an) 。(注意 a i a_i ai 在这里面出现的顺序不影响结果)
引理3.2:如果 a 1 , a 2 , a 3 , … , a n a_1,a_2,a_3,\dots,a_n a1,a2,a3,…,an 是不全为零的整数,那么 ( a 1 , a 2 , a 3 , … , a n ) = ( a 1 , a 2 , a 3 , … , ( a n − 1 , a n ) ) (a_1,a_2,a_3,\dots,a_n)=(a_1,a_2,a_3,\dots,(a_{n-1},a_n)) (a1,a2,a3,…,an)=(a1,a2,a3,…,(an−1,an)) 。
引理3.3:如果 e , d e,d e,d 是整数且 e = d q + r e=dq+r e=dq+r ,其中 q , r q,r q,r 是整数,那么 ( e , d ) = ( d , r ) (e,d)=(d,r) (e,d)=(d,r) 。
证明:在定理 3.7 中,取 a = r a=r a=r , b = d b=d b=d , c = q c=q c=q 即得到该引理。
定理3.11(欧几里得算法)
证明:令 r 0 = a r_0=a r0=a , r 1 = b r_1=b r1=b 是正整数且满足 a ⩾ b a\geqslant b a⩾b ,那么通过连续运用带余除法,我们求得
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ r_0&=r_1q_1+r_…
可以确定最后一定会有一个余数为零,这是因为余数组成的序列 a = r 0 ⩾ r 1 > r 2 > r 3 > ⋯ ⩾ 0 a=r_0\geqslant r_1>r_2>r_3>\cdots\geqslant 0 a=r0⩾r1>r2>r3>⋯⩾0 所包含的项的个数不会大于 a a a (因为每个余数都是整数),由引理 3.3,我们得到 ( a , b ) = ( r 0 , r 1 ) = ( r 1 , r 2 ) = ( r 2 , r 3 ) = ⋯ = ( r n − 2 , r n − 1 ) = ( r n − 1 , r n ) = ( r n , 0 ) (a,b)=(r_0,r_1)=(r_1,r_2)=(r_2,r_3)=\cdots=(r_{n-2},r_{n-1})=(r_{n-1},r_{n})=(r_n,0) (a,b)=(r0,r1)=(r1,r2)=(r2,r3)=⋯=(rn−2,rn−1)=(rn−1,rn)=(rn,0) ,因此 ( a , b ) = r n (a,b)=r_n (a,b)=rn ,这是最后一个非零余数。
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
欧几里得算法是一种快速地求最大公因子的方法。接下来,当我们用欧几里得算法求两个正整数的最大公因子来估算 除法的最大步数 时会看到这一点。
用欧几里得算法来求斐波那契序列中连续项的最大公因子的速度很慢,因为除了最后一步,其余的每一步的商都是1 。
下面的定理将告诉我们用欧几里得算法求斐波那契序列中连续两项的最大公因子需要多少步除法。
定理3.12:令 f n + 1 f_{n+1} fn+1 和 f n + 2 ( n > 1 ) f_{n+2}\ \ (n>1) fn+2 (n>1) 是斐波那契数列中连续的两项,那么用欧几里得算法证明 ( f n + 1 , f n + 2 ) = 1 (f_{n+1},f_{n+2})=1 (fn+1,fn+2)=1 一共需要 n n n 步除法。证明:
证毕。 ■ \qquad \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare ■
欧几里得算法的计算复杂度
定理3.13(拉梅定理):用欧几里得算法计算两个正整数的最大公因子时,所需的除法次数不会超过两个整数中较小的那个十进制的位数的 5 倍。
证明:
拉梅定理的推论,它告诉我们 欧几里得算法是非常高效的 。
推论3.13.1:求两个正整数 a , b a,b a,b, a > b a>b a>b 的最大公因子需要 O ( ( log 2 a ) 3 ) O((\log_2a)^3) O((log2a)3) 次的位运算。
证明:
用线性组合的方式来表示最大公因子
如果已经求得 ,那么因为 ,
我们有
从 到 ,最终
这显示了如何沿着欧几里得算法产生的等式递进最终使得 a , b a,b a,b 的最大公因子 ( a , b ) (a,b) (a,b) 可以表示为 a , b a,b a,b 的线性组合。
自底向上计算
扩展欧几里得算法 只需用一次欧几里得算法就能计算出 ( a , b ) (a,b) (a,b) 。
然而写算法时,由于使用递归,倒推回去也可。
若使用以下方法。若输入数据不满足被除数大于除数,答案错误。
扩展欧几里得算法(自顶向下计算)
定理 3.14:令 ( a , b ) (a,b) (a,b) 是正整数,那么 r n = ( a , b ) = s n a + t n b r_n=(a,b)=s_na+t_nb rn=(a,b)=sna+tnb ,其中 s n , t n s_n,t_n sn,tn 是下面定义的递归序列的第 n n n 项:
且 ,
其中 j = 2 , 3 , ⋯ , n j=2,3,\cdots,n j=2,3,⋯,n ,而 q j q_j qj 是欧几里得算法求 ( a . b ) (a.b) (a.b) 时每一步的商。
证明:我们将证明 , (3.2)
因为 ,一旦等式(3.2)成立,我们就有 。
我们用第二数学归纳原理来证明。
对于 ,有 。因此对 成立。类似地, ,所以对于 成立。
现在假设 ,对于 成立。那么由欧几里得算法的第 步,我们有
由归纳假设,得到
证毕。 ■ \qquad \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare ■
为了证明算术基本定理中分解的唯一性,我们需要先介绍两个引理。
引理3.4:如果 a , b , c a,b,c a,b,c 是正整数,满足 ( a , b ) = 1 (a,b)=1 (a,b)=1 且 a ∣ b c a\mid bc a∣bc ,则 a ∣ c a\mid c a∣c 。
证明:由于 ( a , b ) = 1 (a,b)=1 (a,b)=1 ,存在整数 x x x 使得 a x + b y = 1 ax+by=1 ax+by=1 。等式两边同时乘以 c c c ,得 a c x + b c y = c acx+bcy=c acx+bcy=c 。根据定理 1.9 得 a ∣ ( a c x + b c y ) a\mid (acx+bcy) a∣(acx+bcy),这是因为这是 a , b c a,bc a,bc 的线性组合,而它们都可以被 a a a 整除。因此 a ∣ c a\mid c a∣c 。
引理3.5:如果 p ∣ a 1 a 2 ⋯ a n p\mid a_1a_2\cdots a_n p∣a1a2⋯an ,其中 p p p 为素数,且 a 1 , a 2 , ⋯ , a n a_1,a_2,\cdots,a_n a1,a2,⋯,an 是正整数,则存在整数 i , 1 ⩽ i ⩽ n i,\ 1\leqslant i\leqslant n i, 1⩽i⩽n ,使得 p ∣ a i p\mid a_i p∣ai 。
证明:我们通过数学归纳法证明。对任意素数 p p p
\qquad ①当 n = 1 n=1 n=1 时,显然成立。
\qquad ②假定结果对 n n n 成立。考虑 n + 1 n+1 n+1 个整数的乘积 a 1 a 2 ⋯ a n + 1 a_1a_2\cdots a_{n+1} a1a2⋯an+1 ,它是能够被素数 p p p 整除的。我们知道或者有 ( p , a 1 a 2 ⋯ a n ) = 1 (p,\ a_1a_2\cdots a_n)=1 (p, a1a2⋯an)=1 ,或者有 ( p , a 1 a 2 ⋯ a n ) = p (p,\ a_1a_2\cdots a_n)=p (p, a1a2⋯an)=p 。如果 ( p , a 1 a 2 ⋯ a n ) = 1 (p,\ a_1a_2\cdots a_n)=1 (p, a1a2⋯an)=1 ,则由引理 3.4 , p ∣ a n + 1 p\mid a_{n+1} p∣an+1 。另一方面,如果 p ∣ a 1 a 2 ⋯ a n p\mid a_1a_2\cdots a_n p∣a1a2⋯an ,由归纳假设,存在整数 i , 1 ⩽ i ⩽ n i,\ 1\leqslant i\leqslant n i, 1⩽i⩽n ,使得 p ∣ a i p\mid a_i p∣ai 。因此,对某个满足 1 ⩽ i ⩽ n + 1 1\leqslant i\leqslant n+1 1⩽i⩽n+1 的 i i i , p ∣ a i p\mid a_i p∣ai 。
证毕。
定理3.15(算术基本定理):每个大于 1 1 1 的正整数都可以被唯一地写成素数的乘积,在乘积中的素因子按照非降序排列。
证明:
①我们采用反证法:证明:每个大于 1 1 1 的数必能写成素数的乘积。
假定某正整数不能被写成素数的乘积。设 是这样的整数中最小的(良序性)。如果 是素数,那么它显然是素数的乘积,即一个素数 。所以 一定是合数。设 ,其中 。但是由于 都比 小,因54此它们一定可以写成素数的乘积(良序性)。又由于 ,我们得到 也是素数的乘积。这个矛盾说明每个正整数都可以写成素数的乘积。
②我们现在通过证明这个 分解的唯一性 来完成算术基本定理的证明。
假定整数 有两种不同的素数分解形式: ,其中 和 为素数,且 。
在这两个分解式中约去相同的素数,得到 *。*其中等式左边的素数与右边的不同, 。
然而,这导致了与引理3.5的矛盾。由该引理,一定存在某一个 使得 整除 ,这是不可能的,因为每个 都是与 不同的素数。
因此,正整数 n n n 的素因子分解是唯一的。 ■ \qquad\qquad\qquad\qquad \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare ■
整数分解中把素因子组合成幂的形式被称为 素幂因子分解(prime-power factorization)。
唯一因子分解在哪里不成立:略。
\qquad 用素因子分解来求最大公因子,设 min ( a , b ) \min(a,\ b) min(a, b) 为 a , b a,\ b a, b 中较小的一个。现在设 a , b a,\ b a, b 的素因子分解为
\qquad\qquad\qquad a = p 1 a 1 p 2 a 2 ⋯ p n a n a=p_1^{a_1}p_2^{a_2}\cdots p_n^{a_n} a=p1a1p2a2⋯pnan, b = p 1 b 1 p 2 b 2 ⋯ p n b n b=p_1^{b_1}p_2^{b_2}\cdots p_n^{b_n} b=p1b1p2b2⋯pnbn
其中 p 1 , p 2 , ⋯ , p n p_1,\ p_2,\cdots,p_n p1, p2,⋯,pn 是出现在 a , b a,\ b a, b 的素幂因子分解中的素数(对某些 i i i,有可能有 a i = 0 a_i=0 ai=0 或 b i = 0 b_i=0 bi=0 )
可得 ( a , b ) = p 1 min ( a 1 , b 1 ) p 2 min ( a 2 , b 2 ) ⋯ p n min ( a n , b n ) \qquad(a,\ b)=p_1^{\min(a_1,\ b_1)}p_2^{\min(a_2,\ b_2)} \cdots p_n^{\min(a_n,\ b_n)} (a, b)=p1min(a1, b1)p2min(a2, b2)⋯pnmin(an, bn) ,这是因为对每个素数 p i p_i pi , a , b a,\ b a, b 恰好共同拥有 min ( a i , b i ) \min(a_i,\ b_i) min(ai, bi) 个因子 p i p_i pi 。
定义:两个非 0 整数 a , b a,\ b a, b 的 最小公倍数(the least common multiple)是能够被 a , b a,\ b a, b 整除的最小正整数。 a , b a,\ b a, b 的最小公倍数记为 [ a , b ] [a,\ b] [a, b] ,也可写成 lcm ( a , b ) \operatorname{lcm}(a,\ b) lcm(a, b) 。
\qquad 用素因子分解求最小公倍数:如果 a = p 1 a 1 p 2 a 2 ⋯ p n a n a=p_1^{a_1}p_2^{a_2}\cdots p_n^{a_n} a=p1a1p2a2⋯pnan , b = p 1 b 1 p 2 b 2 ⋯ p n b n b=p_1^{b_1}p_2^{b_2}\cdots p_n^{b_n} b=p1b1p2b2⋯pnbn ,则对一个能够被 a , b a,\ b a, b 同时整除的整数,其素幂因子分解中必须出现 p j p_j pj 且其幂次至少与 a j , b j a_j,\ b_j aj, bj 一样大。因此,能够被 a , b a,\ b a, b 同时整除的最小正整数 [ a , b ] [a,\ b] [a, b] 为
[ a , b ] = p 1 max ( a 1 , b 1 ) p 2 max ( a 2 , b 2 ) ⋯ p n max ( a n , b n ) \qquad\qquad\qquad\qquad [a,\ b]=p_1^{\max(a_1,\ b_1)}p_2^{\max(a_2,\ b_2)} \cdots p_n^{\max(a_n,\ b_n)} [a, b]=p1max(a1, b1)p2max(a2, b2)⋯pnmax(an, bn)
其中 max ( x , y ) \max(x,\ y) max(x, y) 表示 x , y x,\ y x, y 中较大的。
求大整数的素因子分解比较耗费时间。因此我们想要一种求两个整数的最小公倍数但不使用素因子分解的方法。可以由两个正整数的最大公因子求它们的最小公倍数。为此,我们需要证明下面的引理。
引理 3.6:如果 x , y x,y x,y 是实数,则 max ( x , y ) + min ( x , y ) = x + y \max(x,\ y)+\min(x, y)=x+y max(x, y)+min(x,y)=x+y 。
证明:如果 x > y x>y x>y ,则
如果 x < y x
如果 x = y x=y x=y ,
定理3.16:如果 a , b a,\ b a, b 是正整数,则 [ a , b ] = a b / ( a , b ) [a,\ b]=ab/(a,\ b) [a, b]=ab/(a, b) ,其中 [ a , b ] [a,\ b] [a, b] 和 ( a , b ) (a,\ b) (a, b) 分别是 a , b a,\ b a, b 的最小公倍数和最大公因子。
证明:设 a , b a,\ b a, b 的素幂因子分解为 a = p 1 a 1 p 2 a 2 ⋯ p n a n a=p_1^{a_1}p_2^{a_2}\cdots p_n^{a_n} a=p1a1p2a2⋯pnan , b = p 1 b 1 p 2 b 2 ⋯ p n b n b=p_1^{b_1}p_2^{b_2}\cdots p_n^{b_n} b=p1b1p2b2⋯pnbn 。现在设 M j = max ( a j , b j ) M_j=\max(a_j,\ b_j) Mj=max(aj, bj) , m j = min ( a j , b j ) m_j=\min(a_j,\ b_j) mj=min(aj, bj) 则有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ [a,\ b](a,\ b)…
这是因为根据引理 3.6 , M j + m j = max ( a j , b j ) + min ( a j , b j ) = a j + b j M_j+m_j=\max(a_j,\ b_j)+\min(a_j,\ b_j)=a_j+b_j Mj+mj=max(aj, bj)+min(aj, bj)=aj+bj 。 ■ \qquad\qquad\qquad\qquad\blacksquare ■
引理 3.7:设 m , n m,\ n m, n 是互素的正整数,那么如果 d d d 是 m n mn mn 的一个正因子,则存在唯一的一对 m m m 的正因子 d 1 d_1 d1 和 n n n 的正因子 d 2 d_2 d2 使得 d = d 1 d 2 d=d_1d_2 d=d1d2 。反之,如果 d 1 d_1 d1 和 d 2 d_2 d2 分别是 m m m 和 n n n 的正因子,则 d = d 1 d 2 d=d_1d_2 d=d1d2 是 m n mn mn 的正因子。
证明:
定理 3.17:存在无穷多个形如 4 n + 3 4n+3 4n+3 的素数,其中 n n n 为正整数。
算术基本定理可以用来证明下面的结果,它将著名的黎曼 zeta 函数和素数联系起来。
定理 3.19:
证明:
试除法
vector<PII> primes;
void div(int x)
{
for(int i = 2; i * i <= x; i++)
{
if(x % i == 0){
int cnt = 0;
while(x % i == 0)
x /= i, cnt ++;
primes.push_back({i, cnt});
}
if(i * i > x) break;// 任意合数必有一个小于等于sqrt(x)d
}
if(x > 1) priems.push_back({x, 1});
}
17世纪初,费马给出了一种因子分解的方法,这个方法是基于将一个合数表示成两个平方数的差的形式。这个方法在理论和某些实际应用中是相当重要的,但是它本身并不是一个十分有效的方法。它基于下面的引理。
引理 3.9:如果 n n n 是一个正的奇数,那么 n n n 分解为两个正整数的积和表示成两个平方数的差是一一对应的。
证明:
费马因子分解在用来分解一个具有两个相似大小的因子的整数时最有效。尽管费马因子分解很少被用来分解大整数,但是它 的基本思想是计算机计算中广泛使用的很多更有效因子分解算法的基础。
利用费马数证明素数无穷性:利用费马数证明存在无穷多的素数是有可能的。我们从证明两个不同的费马数是互素的开始。这将会用到下面的引理。
费马素数与几何:费马素数在几何学中很重要
\qquad 考虑下面的问题:一个人想购买 510 美元的旅游支票。支票只有 20 美元和 50 美元两种。那么每一种应该买多少?如果令 x 表示他应该买的 20 美元支票的数量,y 表示 50 美元支票的数量,那么就应满足方程 20 x + 50 y = 510 20x+50y=510 20x+50y=510 。为了解决这一问题,应该求出这个方程的所有解,其中 x , y x,\ y x, y 为非负整数。
\qquad 类似的问题出现在当一个妇女想邮寄一个包裹时。邮局的职员测定邮寄这个包裹的费用是 83 美分,但是只有 6 美分和 15 美分的邮票。那么是否有这两种邮票的组合后的面值恰好可以来邮寄这个包裹呢?为了回答这个问题,我们先令 x x x 表示 6 美分邮票的数量,令 y y y 表示 15 美分邮票的数量。那么有 6 x + 15 y = 83 6x+15y=83 6x+15y=83 ,其中 x , y x,\ y x, y 是非负整数。
\qquad 当我们需要求解特定方程的整数解的时候,就得到了一个 丢番图方程。这些方程是根据古希腊数学家丢番图而命名的,他写下了一些方程并将解限定在有理数域上。方程 a x + b y = c ax+by=c ax+by=c (其中 a , b , c a,\ b,\ c a, b, c 是整数)被称为 关于两个变量的线性丢番图方程。
下面的定理说明什么时候这类方程有解,当有解的时候又如何明确地描述它们。
定理 3.23:设 a , b a,\ b a, b 是整数且 d = ( a , b ) d=(a,\ b) d=(a, b) 。如果 d ∤ c d\nmid c d∤c ,那么方程 a x + b y = c ax+by=c ax+by=c 没有整数解。如果 d ∣ c d\mid c d∣c ,那么存在无穷多个整数解。另外,如果 x = x 0 x=x_0 x=x0 , y = y 0 y=y_0 y=y0 是方程的一个特解,那么所有的解可以表示为
x = x 0 + ( b / d ) n y = y 0 − ( a / d ) n \qquad\qquad\qquad\qquad\qquad x=x_0+(b/d)n \qquad y=y_0-(a/d)n x=x0+(b/d)ny=y0−(a/d)n
其中 n n n 是整数。
证明:假设 x , y x,\ y x, y 是整数满足 a x + b y = c ax+by=c ax+by=c 。那么因为 d ∣ a d\mid a d∣a , d ∣ b d\mid b d∣b ,由定理 1.9 同样有 d ∣ c d\mid c d∣c 。因此如果 d ∤ c d\nmid c d∤c ,那么这个方程就不存在整数解。
\qquad 现在假设 d ∣ c d\mid c d∣c ,由定理 3.8 ,存在整数 s , t s,\ t s, t 使得
d = a s + b t ( 1 ) \qquad\qquad\qquad\qquad\qquad\qquad\qquad d=as+bt \qquad\qquad\qquad\qquad (1) d=as+bt(1)
因为 d ∣ c d\mid c d∣c ,有整数 e e e 使得 d e = c de=c de=c 。在(1)两边同时乘以 e e e ,我们有 c = d e = ( a s + b t ) e = a ( s e ) + b ( t e ) c=de=(as+bt)e=a(se)+b(te) c=de=(as+bt)e=a(se)+b(te) 。
因此, x = x 0 x=x_0 x=x0 , y = y 0 y=y_0 y=y0 ,就是方程的一个解,其中 x 0 = s e x_0=se x0=se , y 0 = t e y_0=te y0=te 。
\qquad 为了证明方程存在无穷多个解,令 x = x 0 + ( b / d ) n x=x_0+(b/d)n x=x0+(b/d)n , y = y 0 − ( a / d ) n y=y_0-(a/d)n y=y0−(a/d)n ,其中 n n n 是整数。首先为了证明任何一对整数 ( x , y ) (x,\ y) (x, y) , x = x 0 + ( b / d ) n x=x_0+(b/d)n x=x0+(b/d)n , y = y 0 − ( a / d ) n y=y_0-(a/d)n y=y0−(a/d)n , n n n 是整数,它是方程的解。然后再证明方程的任何一个解都具有这种形式。
\qquad 易知 ( x , y ) (x,\ y) (x, y) 是解,这是因为 a x + b y = a x 0 + a ( b / d ) n + b y 0 − b ( a / d ) n = a x 0 + b y 0 = c ax+by=ax_0+a(b/d)n+by_0-b(a/d)n=ax_0+by_0=c ax+by=ax0+a(b/d)n+by0−b(a/d)n=ax0+by0=c 。
\qquad 我们现在证明方程 a x + b y = c ax+by=c ax+by=c 的解都具有定理中所描述的那种形式。假设整数 x , y x,\ y x, y 满足 a x + b y = c ax+by=c ax+by=c 。因为 a x 0 + b y 0 = c ax_0+by_0=c ax0+by0=c ,做减法得到 ( a x + b y ) − ( a x 0 + b y 0 ) = 0 (ax+by)-(ax_0+by_0)=0 (ax+by)−(ax0+by0)=0 ,这就说明 a ( x − x 0 ) + b ( y − y 0 ) = 0 a(x-x_0)+b(y-y_0)=0 a(x−x0)+b(y−y0)=0 。因此 a ( x − x 0 ) = b ( y 0 − y ) a(x-x_0)=b(y_0-y) a(x−x0)=b(y0−y) 。两边同时除以 d d d ,得 ( a / d ) ( x − x 0 ) = ( b / d ) ( y 0 − y ) (a/d)(x-x_0)=(b/d)(y_0-y) (a/d)(x−x0)=(b/d)(y0−y) 。由定理 3.6 , ( a / d , b / d ) = 1 (a/d,\ b/d)=1 (a/d, b/d)=1 。用引理 3.4 ,有 ( a / d ) ∣ ( y 0 − y ) (a/d)\mid (y_0-y) (a/d)∣(y0−y) 。因此,存在整数 n n n 使得 ( a / d ) n = ( y 0 − y ) (a/d)n=(y_0-y) (a/d)n=(y0−y) 。这就意味着 y = y 0 − ( a / d ) n y=y_0-(a/d)n y=y0−(a/d)n 。现在将这个 y y y 值代入方程 a ( x − x 0 ) = b ( y 0 − y ) a(x-x_0)=b(y_0-y) a(x−x0)=b(y0−y) ,我们得到 a ( x − x 0 ) = b ( a / d ) n a(x-x_0)=b(a/d)n a(x−x0)=b(a/d)n 。这就得到了 x = x 0 + ( b / d ) n x=x_0+(b/d)n x=x0+(b/d)n 。 ■ \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare ■
可以将定理 3.23 推广为多个变量的线性丢番图方程。下面的定理给出了这个推广。
定理 3.24:如果 a 1 , a 2 , ⋯ , a n a_1,\ a_2,\cdots,\ a_n a1, a2,⋯, an 是非零整数,那么方程 a 1 x 1 + a 2 x 2 + ⋯ + a n x n = c a_1x_1+a_2x_2+\cdots+a_nx_n=c a1x1+a2x2+⋯+anxn=c 有整数解当且仅当 d = ( a 1 , a 2 , ⋯ , a n ) d=(a_1,a_2,\cdots,a_n) d=(a1,a2,⋯,an) 整除 c c c 。另外当存在一个解的时候,方程有无穷多个解。
证明:如果存在整数 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,⋯,xn 满足 a 1 x 1 + a 2 x 2 + ⋯ + a n x n = c a_1x_1+a_2x_2+\cdots+a_nx_n=c a1x1+a2x2+⋯+anxn=c ,则由于 d d d 整除 a i , i = 1 , 2 , ⋯ , n a_i,\ i=1,2,\cdots,n ai, i=1,2,⋯,n ,故由定理 1.9 , d d d 整除 c c c 。因此,如果 d ∤ c d\nmid c d∤c ,则方程不存在解。