《初等数论及其应用》第三章 素数和最大公因子

大纲

  1. 要点:素数无穷,素数分布(素数定理),唯一分解定理,最大公因子,欧几里得算法,整数分解,费马数,丢番图方程。

  2. 尽管数学家做了几百年的努力,仍有关于素数的许多问题未被解决。

    • 我们将选取讨论其中的一些,包括最著名的两个:孪生素数猜想哥德巴赫(Goldbach)猜想
  3. 在数论中常常研究具有特殊形式的数。本章中,我们将介绍 费马数 ,即形如 2 n + 1 2^n+1 2n+1 的整数。(费马猜想它们都是素数,但是这被证明是不对的)。

  4. 最后,我们将介绍 丢番图方程,它是只考虑整数解的方程。

    • 我们将证明如何用最大公因子来帮助求解 线性丢番图方程

    • 与其他丢番图方程不同,线性丢番图方程能够容易地系统解决。


3.1 素数

定义:素数是大于 1 1 1 的正整数,并且除了 1 1 1 和它本身外不能被其他正整数所整除。
定义:大于 1 1 1 的不是素数的正整数称为合数。

本节将讨论 给定正整数集中素数的分布证明该分布的一些基础性质 。同时还将讨论关于素数分布的一些更强的结论。

在我们将要介绍的定理中包含了数论中一些最著名的结论。


「素数的无限性」:我们从证明有无穷多个素数开始,为此需要下面的引理。

我们将在本章的后面介绍一些证明素数无穷性的其他方法。(见这一节末尾的习题8以及3.3、3.5和3.6节的习题)。

引理 3.1-每个大于 1 的正整数都有一个素因子

引理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 aa<n ,所以 a a a 一定有素因子。由定理 1.8, a a a 的任何因子也是 n n n 的因子,因此 n n n 必有素因子。与假设矛盾。所以我们就得到结论:任何一个大于 1 1 1 的正整数至少有一个素因子。

定理 3.1-素数无限性

定理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=p1p2pn+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 1jn 。由于 Q n − p 1 p 2 ⋯ p n = 1 Q_n-p_1p_2\cdots p_n=1 Qnp1p2pn=1 ,且 q q q 可以整除 Q n Q_n Qn p 1 p 2 ⋯ p n p_1p_2\cdots p_n p1p2pn ,因此由定理 1.9, q ∣ 1 q\mid 1 q1 。这显然是不可能的,因为 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)。因此,在证明过程中我们只是知道存在一个新的素数但是并没有求得它。

求素数:在下面的章节中,我们将把兴趣放在 如何求大素数 和 使用大素数 上。

定理 3.2 合数必有一个不超过 sqrt(n) 的素因子

将素数和合数加以区分的测试是至关重要的,这种测试叫做 素性检验。最基本的素性检验是「试除法」。

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<ab<n
我们一定有 a ≤ n a\le \sqrt{n} an ,否则若 b ≥ a > n b\ge a>\sqrt{n} ba>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 狄利克雷

定理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,) 包含了无穷多的素数。

  1. 目前为止狄利克雷定理没有简单的证法。(狄利克雷的原始证明使用了复变量。后来爱尔迪希(Erdos)和塞尔伯格(Selberg)在 20世纪 50年代给出了一个初等但较复杂的证明)。
  2. 但是狄利克雷定理的一些特例很容易证。我们将通过在 3.5 节中证明有无穷多个 4 n + 3 4n+3 4n+3 型的素数来说明这一点。

已知的最大素数:在近千百年的历史中,数学家和一些数学爱好者们总是试图找到一个比已知的最大素数更大的素数。一个人会因为找到这样的素数而至少在当时一举成名,并且他或她的名字也将被载入史册。因为有无穷多的素数,因而总有素数比当时的已知最大素数要大。寻找新素数也有一些系统化的方法。人们并不是随机挑选一些数来检验其是否为素数,而是选取一些特殊形式的数。例如,我们将在第7章中讨论具有 2 p − 1 2^p-1 2p1 形式的素数,其中是 p p p 素数;这种数被称为 梅森素数(Mersenne primes)。我们将看到用一种特殊的测试可以检验出 2 p − 1 2^p-1 2p1 是否为素数,而不需要用试除法。过去几百年中多数时间里最大的素数一直是梅森素数。目前已知的最大素数的世界纪录是 2 43   112   609 − 1 2^{43\ 112\ 609}-1 243 112 6091

素数公式

  1. 是否有一个公式只产生素数呢?
  2. 关于一个变元的多项式没有这种性质,习题23证明了这一点。同样,关于 n n n 个变元的多项式不能只产生素数,其中 n n n 是一个正整数(这个结论超出了本书的范围)。
  3. 有一些可以只产生素数的公式但是不实用。例如,米尔斯(Mills)证明了存在一个常数 Θ \varTheta Θ 使得函数 f ( n ) = [ Θ 3 n ] f(n)=[\varTheta^{3^n}] f(n)=[Θ3n] 只生成素数,我们只知道 Θ \varTheta Θ 的近似值 Θ ≈ 1.3064 \varTheta\approx1.3064 Θ1.3064

如果没有一个实用的公式可以产生大素数,那么怎么才能生成它们呢?在第6章中将介绍如何用概率素性检验法来生成大素数。

素性证明

  1. 广义黎曼猜想 成立的条件下,米勒(G. L. Miller)于1975年给出了一个可用 O ( ( log ⁡ n ) 5 ) O((\log{n})^5) O((logn)5) 次位运算来证明一个整数是素数的算法。但可惜的是,广义黎曼猜想到现在尚未被证明。

  2. ★ \bigstar 由于广义黎曼猜想并没有被证明,其后由Michael O. Rabin教授作出修改,提出了不依赖于该假设的 随机化算法

  3. 在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位的整数是否为素数用时少于一个小时。

  4. 素性验证的多项式时间算法

    1. 2002年,一位印度计算机教授
  • 我们现在只是讨论了素性检验中的「确定性算法」(deterministic algorithms),即用来确定一个整数是否为素数的算法。
    • 在第6章中我们将讨论 概率素性检验法,即 米勒-拉宾算法,定理6.11 。这个测试将告诉我们一个整数有很高的可能性是素数,但并不确定其为素数。

3.2 素数的分布

在18世纪后期,数学家们通过手算建立了素数表。通过这些数值,他们开始寻找函数来估计 π ( x ) \pi(x) π(x)

定理 3.4-素数定理

定义:函数 π ( 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 xlim(x/lnx)π(x)=1

用一个简单的方法来表述素数定理是写成 π ( x ) ∽ x ln ⁡ x \pi(x)\backsim\dfrac{x}{\ln{x}} π(x)lnxx。这里符号 ∽ \backsim 表示渐进于。

推论 3.4.1 第 n 个素数的大小

推论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 pnnlogn ,即第 n n n 个素数渐进于 log ⁡ n \log{n} logn

随机选到素数的概率

如果随机地选择一个正整数,那么它是素数的概率有多大呢?

定理 3.5

定理3.5:对于任意的正整数 n n n,存在至少 n n n 个连续的正合数。
证明

关于素数的猜想

  1. 伯兰特猜想;
  2. 「孪生素数猜想」;
  3. 「哥德巴赫猜想」:每个大于 2 2 2 的正偶数可以写成两个素数的和。
  4. 素数等差数列的「厄尔多斯猜想」:对任意的正整数 n ≥ 3 n\ge 3 n3,有一个由素数组成的长度为 n n n 的等差数列。
    1. 2006年Ben Green和陶哲轩取得了突破性进展从而证明了该猜想。
  5. n 2 + 1 n^2+1 n2+1 猜想:存在无穷多个形如 n 2 + 1 n^2+1 n2+1 的素数,其中 n n n 是正整数。
  6. 勒让德猜想

3.3 最大公因子及其性质

定理 3.6

定理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 ded ,于是 e = 1 e=1 e=1 。因此 ( a d , b d ) = 1 (\dfrac{a}{d},\dfrac{b}{d})=1 (da,db)=1

推论 3.6.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)=(a+cb,b)

定理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 ea+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)

定理 3.8 gcd与线性组合

定义:如果 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 da d ∣ b d\mid b db
    由带余除法,得到 a = d q + r a=dq+r a=dq+r 0 ≤ r < d 0\le r0r<d 。由这个方程和(1)可以得到 r = a − d q = a − q ( m a + n b ) = ( 1 − m q ) a − q n b r=a-dq=a-q(ma+nb)=(1-mq)a-qnb r=adq=aq(ma+nb)=(1mq)aqnb 。这就证明了整数 r r r a , b a,b a,b 的线性组合。因为 0 ≤ r < d 0\le r0r<d d d d a , b a,b a,b 的线性组合中最小的正整数,于是我们得到 r = 0 r=0 r=0,因此 d ∣ a d\mid a da 。同理可得 d ∣ b d\mid b db

  • 接下来证明它是 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 ca c ∣ b c\mid b cb ,那么由定理 1.9 有 c ∣ d c\mid d cd ,因此 d ≥ c d\ge c dc

证毕。 ■ \qquad \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\blacksquare

推论 3.8.1 贝祖定理

推论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

推论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 线性组合与gcd的倍数

定理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 一种定义gcd的方式

不依赖于整数的有序性定义最大公因子。
定理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 da d ∣ b d\mid b db
\qquad\qquad (ii) 如果 c c c 是整数且 c ∣ a c\mid a ca c ∣ b c\mid b cb ,那么 c ∣ d c\mid d cd

证明 \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

引理 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,\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,,(an1,an))

互素,两两互素

3.4 欧几里得算法

引理 3.3 (a,b) = (b,a % b)

引理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 欧几里得算法

定理3.11(欧几里得算法)
证明:令 r 0 = a r_0=a r0=a r 1 = b r_1=b r1=b 是正整数且满足 a ⩾ b a\geqslant b ab ,那么通过连续运用带余除法,我们求得
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=r0r1>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)==(rn2,rn1)=(rn1,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;
}

欧几里得算法是一种快速地求最大公因子的方法。接下来,当我们用欧几里得算法求两个正整数的最大公因子来估算 除法的最大步数 时会看到这一点。

定理 3.12 斐波那契与欧几里得

用欧几里得算法来求斐波那契序列中连续项的最大公因子的速度很慢,因为除了最后一步,其余的每一步的商都是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 欧几里得算法的高效性

定理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) 次的位运算。
证明

定理 3.14(扩欧)

用线性组合的方式来表示最大公因子

如果已经求得 ,那么因为 ,

我们有

从 到 ,最终

这显示了如何沿着欧几里得算法产生的等式递进最终使得 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.5 算术基本定理

为了证明算术基本定理中分解的唯一性,我们需要先介绍两个引理。

引理 3.4

引理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 abc ,则 a ∣ c a\mid c ac
证明:由于 ( 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 ac

引理 3.5

引理3.5:如果 p ∣ a 1 a 2 ⋯ a n p\mid a_1a_2\cdots a_n pa1a2an ,其中 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, 1in ,使得 p ∣ a i p\mid a_i pai
证明:我们通过数学归纳法证明。对任意素数 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} a1a2an+1 ,它是能够被素数 p p p 整除的。我们知道或者有 ( p ,   a 1 a 2 ⋯ a n ) = 1 (p,\ a_1a_2\cdots a_n)=1 (p, a1a2an)=1 ,或者有 ( p ,   a 1 a 2 ⋯ a n ) = p (p,\ a_1a_2\cdots a_n)=p (p, a1a2an)=p 。如果 ( p ,   a 1 a 2 ⋯ a n ) = 1 (p,\ a_1a_2\cdots a_n)=1 (p, a1a2an)=1 ,则由引理 3.4 , p ∣ a n + 1 p\mid a_{n+1} pan+1 。另一方面,如果 p ∣ a 1 a 2 ⋯ a n p\mid a_1a_2\cdots a_n pa1a2an ,由归纳假设,存在整数 i ,   1 ⩽ i ⩽ n i,\ 1\leqslant i\leqslant n i, 1in ,使得 p ∣ a i p\mid a_i pai 。因此,对某个满足 1 ⩽ i ⩽ n + 1 1\leqslant i\leqslant n+1 1in+1 i i i p ∣ a i p\mid a_i pai
证毕。

定理 3.15 算术基本定理

定理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)。

唯一因子分解在哪里不成立:略。

素因子分解的应用

  • 素数 p p p 整除 n n n 当且仅当它出现在 n n n 的素幂因子分解中。
  • 一个素数 p p p 能整除 n n n 的最高次幂是 p p p n n n 的素幂因子分解中的幂次。
  • 一个整数 d d d 整除 n n n 当且仅当 d d d 的素幂因子分解中出现的所有素数都在 n n n 的素幂因子分解中出现,且其出现的幂次大于等于在 d d d 的素幂因子分解中的幂次。

\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=p1a1p2a2pnan 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=p1b1p2b2pnbn
其中 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=p1a1p2a2pnan 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=p1b1p2b2pnbn ,则对一个能够被 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

引理 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 x=y

定理 3.16

定理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=p1a1p2a2pnan 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=p1b1p2b2pnbn 。现在设 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 算术基本定理的推论

引理 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.8

定理 3.17

定理 3.17:存在无穷多个形如 4 n + 3 4n+3 4n+3 的素数,其中 n n n 为正整数。

关于无理数的结果

定理 3.18

定理 3.19

算术基本定理可以用来证明下面的结果,它将著名的黎曼 zeta 函数和素数联系起来。
定理 3.19
证明


3.6 因子分解法和费马数

因子分解

试除法

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

引理 3.9:如果 n n n 是一个正的奇数,那么 n n n 分解为两个正整数的积和表示成两个平方数的差是一一对应的。
证明

费马因子分解在用来分解一个具有两个相似大小的因子的整数时最有效。尽管费马因子分解很少被用来分解大整数,但是它 的基本思想是计算机计算中广泛使用的很多更有效因子分解算法的基础。

费马数

定理 3.20

利用费马数证明素数无穷性:利用费马数证明存在无穷多的素数是有可能的。我们从证明两个不同的费马数是互素的开始。这将会用到下面的引理。

引理 3.10

定理 3.21

费马素数与几何:费马素数在几何学中很重要

定理 3.22

3.7 线性丢番图方程

\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

下面的定理说明什么时候这类方程有解,当有解的时候又如何明确地描述它们。
定理 3.23:设 a ,   b a,\ b a, b 是整数且 d = ( a ,   b ) d=(a,\ b) d=(a, b) 。如果 d ∤ c d\nmid c dc ,那么方程 a x + b y = c ax+by=c ax+by=c 没有整数解。如果 d ∣ c d\mid c dc ,那么存在无穷多个整数解。另外,如果 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 da d ∣ b d\mid b db ,由定理 1.9 同样有 d ∣ c d\mid c dc 。因此如果 d ∤ c d\nmid c dc ,那么这个方程就不存在整数解。
\qquad 现在假设 d ∣ c d\mid c dc ,由定理 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 dc ,有整数 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+by0b(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(xx0)+b(yy0)=0 。因此 a ( x − x 0 ) = b ( y 0 − y ) a(x-x_0)=b(y_0-y) a(xx0)=b(y0y) 。两边同时除以 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)(xx0)=(b/d)(y0y) 。由定理 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)(y0y) 。因此,存在整数 n n n 使得 ( a / d ) n = ( y 0 − y ) (a/d)n=(y_0-y) (a/d)n=(y0y) 。这就意味着 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(xx0)=b(y0y) ,我们得到 a ( x − x 0 ) = b ( a / d ) n a(x-x_0)=b(a/d)n a(xx0)=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.24

可以将定理 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 dc ,则方程不存在解。

你可能感兴趣的:(初等数论及其应用,数学)