相关笔记
- 前置笔记:第30章_多项式与FFT-章节汇总
- 关联概念:整除、最大公约数、欧几里得算法、贝祖定理、素数、算术基本定理
- 章节汇总:第31章_数论算法-章节汇总
概览
本节涵盖CLRS第31章前两节的核心内容,为数论算法奠定数学基础。
31.1 初等数论概念:建立整除性(divisibility)、素数与合数(prime/composite)、算术基本定理(fundamental theorem of arithmetic)等基本概念,并定义最大公约数(greatest common divisor, GCD)与最小公倍数(least common multiple, LCM)。
31.2 最大公约数:介绍欧几里得算法(Euclidean algorithm)——人类历史上最古老的算法之一,通过辗转相除高效计算GCD;进而介绍扩展欧几里得算法(extended Euclidean algorithm),不仅求出GCD,还求出满足贝祖恒等式(Bézout identity)的系数;最后给出Lamé定理,分析欧几里得算法的最坏情况复杂度。
核心要点:
- 整除性是所有数论概念的基石
- 算术基本定理保证素因数分解的唯一性
- 欧几里得算法基于 的递归关系
- 扩展欧几里得算法可同时求出贝祖系数,是密码学中计算模逆元的关键工具
- Lamé定理表明最坏情况下除法次数不超过较小数十进制位数的5倍
A["31.1 初等数论概念"] --> B["整除性 Divisibility"] A --> C["素数与合数 Prime & Composite"] A --> D["算术基本定理 FTA"] A --> E["GCD 与 LCM"] B --> B1["定义:d|a ⟺ ∃k: a = dk"] B --> B2["性质:传递性、线性组合封闭性"] C --> C1["素数:仅有1和自身两个正因子"] C --> C2["合数:存在非平凡因子"] D --> D1["每个 n > 1 可唯一分解为素数之积"] D --> D2["标准形式:n = p₁^e₁ · p₂^e₂ ··· p_k^e_k"] E --> E1["gcd(a,b):最大公共正因子"] E --> E2["lcm(a,b):最小公共正倍数"] E --> E3["gcd × lcm = |ab|"] F["31.2 最大公约数"] --> G["欧几里得算法 EUCLID"] F --> H["扩展欧几里得算法 EXTENDED-EUCLID"] F --> I["Lamé定理"] G --> G1["核心递归:gcd(a,b) = gcd(b, a mod b)"] G --> G2["终止条件:gcd(a,0) = a"] H --> H1["返回 (d, x, y) 满足 d = ax + by"] H --> H2["贝祖恒等式 Bézout Identity"] I --> I1["最坏情况:连续Fibonacci数"] I --> I2["除法次数 ≤ 5d(d为十进制位数)"]
核心思想
31.1 初等数论概念
整除性(Divisibility)
整除性是数论中最基本的关系。设 和 为整数,其中 。如果存在某个整数 使得 ,则称 整除 ( divides ),记作 。此时也称 是 的一个约数(divisor)或因子(factor), 是 的一个倍数(multiple)。
如果 不能整除 ,则记作 。
整除性的基本性质(以下均设 为整数,且 ):
-
自反性:若 且 ,则 且 。
- 证明:由 知 ,由 知 ,故 ,即 。同理 。
-
传递性:若 且 ,则 。
- 证明:,,故 。
-
线性组合封闭性:若 且 ,则对任意整数 ,有 。
- 证明:,,故 。
-
比较性质:若 且 ,则 。
- 证明: 且 (否则 ),故 。
-
整除等价: 当且仅当 ,当且仅当 。
- 证明:。
除法基本定理(Division Theorem):对任意整数 和正整数 ,存在唯一整数对 使得
其中 称为商(quotient), 称为余数(remainder)。
唯一性的证明:假设存在两组 和 都满足条件,则 ,即 。由于 ,故 。而 是 的倍数,唯一满足 的整数是 ,故 ,。
素数与合数(Prime and Composite Numbers)
素数(prime number)是大于1的正整数 ,其正因子只有1和 本身。前几个素数为:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, …
合数(composite number)是大于1的非素数正整数,即存在某个整数 ()使得 。
关键性质:
-
素数有无穷多个:这是欧几里得在《几何原本》第九卷命题20中证明的。证明采用反证法:假设素数只有有限个 ,考虑 。 要么本身是素数(不在列表中),要么有一个素因子不在列表中(因为 除以任何 余1),矛盾。
-
素因子性质:若 为素数且 ,则 或 。
- 证明思路:若 ,则 ,由贝祖恒等式存在 使得 ,两边乘以 得 。由于 ,故 。
算术基本定理(Fundamental Theorem of Arithmetic)
定理:每个大于1的整数 都可以唯一地表示为素数的乘积(不计因子的排列顺序),即
其中 为素数, 为正整数指数。这称为 的标准素因数分解(canonical prime factorization)。
唯一性的证明思路(反证法):
【反证法(最小反例法)】:假设存在大于1的整数可以以不止一种方式分解为素数之积。令 为最小的这样的整数。
- 若 是素数,则只有一种分解方式(自身),矛盾。
- 故 是合数。设 是两种不同的素因数分解。
- 由于 ,由素因子性质, 必整除某个 。
- 由于 也是素数,故 。
- 两边除以 ,得到 有两种不同的素因数分解,但 ,与 的最小性矛盾。
推论:利用标准素因数分解,可以方便地计算GCD和LCM。若
(允许某些指数为0),则
最大公约数与最小公倍数(GCD and LCM)
最大公约数(Greatest Common Divisor, GCD):两个不全为零的整数 和 的最大公约数 是能同时整除 和 的最大正整数。
最小公倍数(Least Common Multiple, LCM):两个正整数 和 的最小公倍数 是同时被 和 整除的最小正整数。
GCD与LCM的核心关系:
证明:利用素因数分解,对每个素因子 ,其在 中的指数为 ,在 中的指数为 ,而 ,故乘积恢复为 ,即 的素因数分解。
互素(Relatively Prime / Coprime):若 ,则称 和 互素。
素因数分解实例:
- 验证:。
GCD的等价定义: 也可以定义为 和 的所有线性组合 中的最小正元素。这一定义直接联系到贝祖恒等式,也是扩展欧几里得算法的理论基础。
31.2 最大公约数
欧几里得算法(Euclidean Algorithm)
欧几里得算法基于以下关键定理:
定理(GCD递归性质):对任意非负整数 和正整数 ,
证明:
设 。需要证明 也是 ,即证明两个集合的正因子相同。
- 由除法基本定理,,其中 ,。
- 若 且 ,则 ,故 且 ,即 是 和 的公因子。
- 反之,若 且 ,则 ,故 也是 和 的公因子。
- 因此 和 的公因子集合与 和 的公因子集合完全相同,它们的最大值自然相等。
伪代码(CLRS风格,使用Unicode符号):
EUCLID(a, b)
1 if b == 0
2 return a
3 else return EUCLID(b, a mod b)
执行流程图:
flowchart TD A(["开始"]) --> B["输入 a, b"] B --> C{"b == 0?"} C -->|"是"| D["返回 a"] C -->|"否"| E["递归调用 EUCLID(b, a mod b)"] E --> C D --> F(["结束"])
逐步执行实例:计算
| 调用 | a | b | a mod b | 返回值 |
|---|---|---|---|---|
| EUCLID(30, 21) | 30 | 21 | 9 | EUCLID(21, 9) |
| EUCLID(21, 9) | 21 | 9 | 3 | EUCLID(9, 3) |
| EUCLID(9, 3) | 9 | 3 | 0 | EUCLID(3, 0) |
| EUCLID(3, 0) | 3 | 0 | — | 3 |
因此 。
再计算一个实例:
| 调用 | a | b | a mod b |
|---|---|---|---|
| EUCLID(270, 192) | 270 | 192 | 78 |
| EUCLID(192, 78) | 192 | 78 | 36 |
| EUCLID(78, 36) | 78 | 36 | 6 |
| EUCLID(36, 6) | 36 | 6 | 0 |
| EUCLID(6, 0) | 6 | 0 | — |
因此 。
扩展欧几里得算法(Extended Euclidean Algorithm)
扩展欧几里得算法不仅计算 ,还找出整数 和 (称为贝祖系数,Bézout coefficients),使得
这个等式称为贝祖恒等式(Bézout identity)。
定理(贝祖定理):对任意整数 和 (不全为零),存在整数 和 使得 。
证明思路(基于欧几里得算法的回代):
欧几里得算法产生一系列等式:
其中 。从倒数第二个等式开始,将 表示为 和 的线性组合,再逐步回代,最终得到 。
伪代码:
EXTENDED-EUCLID(a, b)
1 if b == 0
2 return (a, 1, 0)
3 else (d', x', y') ← EXTENDED-EUCLID(b, a mod b)
4 (d, x, y) ← (d', y', x' - ⌊a/b⌋ · y')
5 return (d, x, y)
执行流程图:
flowchart TD A(["开始"]) --> B["输入 a, b"] B --> C{"b == 0?"} C -->|"是"| D["返回 d=a, x=1, y=0"] C -->|"否"| E["递归调用 EXTENDED-EUCLID(b, a mod b)"] E --> F["获得 d', x', y'"] F --> G["计算 x = y'"] G --> H["计算 y = x' - ⌊a/b⌋ × y'"] H --> I["返回 d, x, y"] D --> J(["结束"]) I --> J
算法返回三元组 ,其中 ,且 。
正确性证明:
【数学归纳法(对递归深度)】:
- 基础情况:当 时,返回 。此时 ,且 ,正确。
- 归纳步骤:假设递归调用
EXTENDED-EUCLID(b, a mod b)正确返回 ,满足 。由于 ,且 ,代入得: 令 ,,则 ,正确。
逐步执行实例:计算 及贝祖系数
EXTENDED-EUCLID(30, 21)
→ EXTENDED-EUCLID(21, 9)
→ EXTENDED-EUCLID(9, 3)
→ EXTENDED-EUCLID(3, 0)
→ 返回 (3, 1, 0)
→ d'=3, x'=1, y'=0
→ x = y' = 0, y = x' - ⌊9/3⌋·y' = 1 - 3·0 = 1
→ 返回 (3, 0, 1)
→ d'=3, x'=0, y'=1
→ x = y' = 1, y = x' - ⌊21/9⌋·y' = 0 - 2·1 = -2
→ 返回 (3, 1, -2)
→ d'=3, x'=1, y'=-2
→ x = y' = -2, y = x' - ⌊30/21⌋·y' = 1 - 1·(-2) = 3
→ 返回 (3, -2, 3)
验证:。正确。
再计算一个实例:
EXTENDED-EUCLID(99, 78)
→ EXTENDED-EUCLID(78, 21)
→ EXTENDED-EUCLID(21, 15)
→ EXTENDED-EUCLID(15, 6)
→ EXTENDED-EUCLID(6, 3)
→ EXTENDED-EUCLID(3, 0)
→ 返回 (3, 1, 0)
→ x=0, y=1-⌊6/3⌋·0=1 → 返回 (3, 0, 1)
→ x=1, y=0-⌊15/6⌋·1=0-2=-2 → 返回 (3, 1, -2)
→ x=-2, y=1-⌊21/15⌋·(-2)=1-1·(-2)=3 → 返回 (3, -2, 3)
→ x=3, y=-2-⌊78/21⌋·3=-2-3·3=-11 → 返回 (3, 3, -11)
→ x=-11, y=3-⌊99/78⌋·(-11)=3-1·(-11)=14 → 返回 (3, -11, 14)
验证:。正确。
贝祖恒等式的推论与应用:
- GCD的线性组合刻画: 是所有形如 ()的数中最小的正整数。任何 和 的公因子都整除 。
- 互素的等价条件: 当且仅当存在整数 使得 。这一等价条件在后续的模线性方程求解中至关重要。
- 模逆元的存在性:若 ,则 在模 下存在乘法逆元 ,满足 。该逆元可通过扩展欧几里得算法求得。
Lamé定理
定理(Lamé, 1844):对于 ,若欧几里得算法对整数 执行了恰好 次除法(递归调用),且 是满足此条件的最小值,则
其中 是斐波那契数列(Fibonacci sequence),定义为 ,,()。
推论:对任意 ,设 的十进制位数为 ,则欧几里得算法的除法次数不超过 。
证明思路:
【利用Fibonacci数列的增长速度】:
- 由Lamé定理,执行 次除法需要 。
- Fibonacci数列的增长满足 (其中 为黄金比例)。
- 因此 ,即 。
- 由于 ,而 有 位十进制数意味着 。
- 故 (当 时)。
最坏情况实例:计算
以 (,)为例:
| 调用 | a | b | a mod b |
|---|---|---|---|
| EUCLID(21, 13) | 21 | 13 | 8 |
| EUCLID(13, 8) | 13 | 8 | 5 |
| EUCLID(8, 5) | 8 | 5 | 3 |
| EUCLID(5, 3) | 5 | 3 | 2 |
| EUCLID(3, 2) | 3 | 2 | 1 |
| EUCLID(2, 1) | 2 | 1 | 0 |
| EUCLID(1, 0) | 1 | 0 | — |
共执行6次除法。 有 位,,满足Lamé定理的界。
欧几里得算法的迭代版本:
除了递归版本,欧几里得算法也可以写成迭代形式。迭代版本避免了递归调用的开销,在实际编程中更为常用:
ITERATIVE-EUCLID(a, b)
1 while b ≠ 0
2 (a, b) ← (b, a mod b)
3 return a
迭代版本执行实例:计算
| 步骤 | a | b | a mod b |
|---|---|---|---|
| 初始 | 30 | 21 | — |
| 第1次 | 21 | 9 | 30 mod 21 = 9 |
| 第2次 | 9 | 3 | 21 mod 9 = 3 |
| 第3次 | 3 | 0 | 9 mod 3 = 0 |
| 返回 | 3 | — | — |
欧几里得算法的复杂度分析:
- 时间复杂度:由Lamé定理,除法次数为 ,其中 为较小数。由于每次除法运算的时间为 (假设整数运算为常数时间),总时间复杂度为 。若考虑大整数的实际运算成本,使用标准除法时为 ,其中 为表示 和 所需的位数。
- 空间复杂度:递归版本需要 的栈空间;迭代版本仅需 的额外空间。
欧几里得算法的历史渊源
欧几里得算法是已知最古老的算法之一,可追溯至约公元前300年。它首次出现在欧几里得的《几何原本》(Elements)第七卷命题2中。欧几里得以几何的方式描述该算法——通过”反复从较大数中减去较小数”来寻找两个数的”公度”(common measure)。有趣的是,中国古代数学典籍《九章算术》中也独立出现了类似的”更相减损术”。该算法历经2300余年仍被广泛使用,堪称算法史上最伟大的成就之一。
Lamé定理与Fibonacci数列
法国数学家Gabriel Lamé于1844年证明了欧几里得算法的最坏情况分析,这是Fibonacci数列在算法分析中的首次应用。Lamé证明了:若欧几里得算法需要 次除法,则输入的两个数至少分别为 和 。这意味着连续的Fibonacci数对构成了欧几里得算法的最坏情况输入。Knuth后来给出了更精确的界:对于 ,除法次数不超过 。
扩展欧几里得算法在密码学中的应用
扩展欧几里得算法是现代密码学的核心工具之一。在RSA加密系统中,生成密钥时需要计算公钥指数 在模 下的模逆元(modular inverse),即求 使得 ,这正是扩展欧几里得算法求解贝祖恒等式的直接应用。在Diffie-Hellman密钥交换协议中,扩展欧几里得算法同样用于确保共享密钥的正确计算。几乎所有依赖模运算的公钥密码系统都离不开这一算法。
算术基本定理的唯一性
算术基本定理(又称唯一分解定理)断言每个大于1的整数都可以唯一地表示为素数的乘积。这一定理的本质可追溯到欧几里得《几何原本》第七卷命题32和第九卷命题14。Gauss在1801年的《算术研究》(Disquisitiones Arithmeticae)中首次给出了符合现代严格标准的证明。该定理是数论的基石之一,它保证了素数确实是整数世界的”原子”——所有整数都由素数唯一构建而成。
GCD与LCM的关系容易记混
GCD取的是每个素因子指数的最小值,LCM取的是最大值。一个常见的错误是混淆两者。记住:GCD是”公约数”(共同的约数),所以取”较小”的指数;LCM是”公倍数”(共同的倍数),所以取”较大”的指数。恒等式 可以帮助验证计算结果。例如 ,,。
素数与不可约数的区别
在整数环 中,“素数”(prime)和”不可约数”(irreducible)是等价的概念。但在更一般的整环中,两者可能不同。一个元素 是素元(prime)如果 推出 或 ; 是不可约元(irreducible)如果 推出 或 是单位。在 中两者等价,但在 等环中,存在不可约但非素的元素。算术基本定理依赖于素元与不可约元的等价性,这也是唯一分解整环(UFD)的核心特征。
扩展欧几里得算法返回的贝祖系数可以是负数
EXTENDED-EUCLID 返回的 和 不一定是正数。例如 返回 ,其中 是负数。这在密码学中计算模逆元时需要注意:若求 在模 下的逆元,得到 后需要取 确保结果为正。例如若扩展欧几里得返回 ,模 的逆元为 ,验证 。
习题精选
| 题号 | 题目描述 | 难度 |
|---|---|---|
| 31.1-1 | 证明:若 且 ,则 或 (假设 ) | ★☆☆ |
| 31.1-5 | 证明:若 为正整数且 ,则 | ★☆☆ |
| 31.1-6 | 证明:,推广GCD到多个参数 | ★★☆ |
| 31.2-2 | 手动执行 EXTENDED-EUCLID(252, 198),验证贝祖恒等式 | ★★☆ |
31.1-1 解答
证明:由 知存在整数 使得 。由 知存在整数 使得 。
将 代入 ,得 。由于 ,两边除以 得 。
由于 都是整数,满足 的整数对只有 和 。
- 若 ,则 。
- 若 ,则 。
因此 或 。
31.1-5 解答
证明:由于 ,存在整数 使得 。
设 。由于 (因为 是 和 的公因子),且 ,由整除的传递性得 。
另一方面, 本身就是 和 的公因子(因为 且 )。
因此 是 和 的最大公因子,而 也是公因子,故 。同时 意味着 (因为 )。
故 ,即 。
31.1-6 解答
证明:令 ,。需要证明 。
第一部分:。
- 是 的公因子,故 且 ,因此 。
- 又 ,故 是 和 的公因子,因此 。
第二部分:。
- ,故 且 。
- 由 知 且 。
- 因此 是 的公因子,故 。
由 和 ,且 ,得 。
31.2-2 解答
执行 EXTENDED-EUCLID(252, 198):
EXTENDED-EUCLID(252, 198) → EXTENDED-EUCLID(198, 54) // 252 = 198·1 + 54 → EXTENDED-EUCLID(54, 36) // 198 = 54·3 + 36 → EXTENDED-EUCLID(36, 18) // 54 = 36·1 + 18 → EXTENDED-EUCLID(18, 0) // 36 = 18·2 + 0 → 返回 (18, 1, 0) → x=0, y=1-⌊36/18⌋·0=1 → 返回 (18, 0, 1) → x=1, y=0-⌊54/36⌋·1=0-1=-1 → 返回 (18, 1, -1) → x=-1, y=1-⌊198/54⌋·(-1)=1-3·(-1)=4 → 返回 (18, -1, 4) → x=4, y=-1-⌊252/198⌋·4=-1-1·4=-5 → 返回 (18, 4, -5)结果:,贝祖系数 ,。
验证:。
补充练习:利用扩展欧几里得算法求 在模 下的逆元。
补充练习解答
执行 :
EXTENDED-EUCLID(35, 12) → EXTENDED-EUCLID(12, 11) // 35 = 12·2 + 11 → EXTENDED-EUCLID(11, 1) // 12 = 11·1 + 1 → EXTENDED-EUCLID(1, 0) // 11 = 1·11 + 0 → 返回 (1, 1, 0) → x=0, y=1-⌊11/1⌋·0=1 → 返回 (1, 0, 1) → x=1, y=0-⌊12/11⌋·1=0-1=-1 → 返回 (1, 1, -1) → x=-1, y=1-⌊35/12⌋·(-1)=1-2·(-1)=3 → 返回 (1, -1, 3),贝祖系数 ,。
在模 下的逆元为 。
验证:,故 。
视频学习指南
以下视频资源按推荐学习顺序排列,从基础概念到进阶应用:
| 资源名称 | 讲者/平台 | 内容 | 链接 |
|---|---|---|---|
| MIT 6.046J Lecture 11: Integer Arithmetic | Prof. Erik Demaine | GCD、欧几里得算法、扩展欧几里得算法的系统讲解 | YouTube |
| 3Blue1Brown: The Fibonacci sequence and the Euclidean algorithm | 3Blue1Brown | 可视化展示Fibonacci数列与欧几里得算法最坏情况的联系 | YouTube |
| Khan Academy: Euclidean algorithm | Khan Academy | 欧几里得算法的基础讲解与练习 | Khan Academy |
| Michael Penn: The Extended Euclidean Algorithm | Michael Penn | 扩展欧几里得算法的详细推导与实例 | YouTube |
学习建议:建议先观看Khan Academy的基础视频建立直觉,再通过3Blue1Brown的可视化理解Fibonacci数列与最坏情况的联系,最后通过MIT OCW课程获得严谨的理论框架。
CLRS教材原文
关于整除性的定义(31.1节): “We say that if there exists an integer such that . We also say that divides , is a divisor of , and is a multiple of .”
关于算术基本定理(31.1节): “A composite number can be factored uniquely into prime numbers. More precisely, theorem 31.9 states that every integer greater than can be written uniquely as a product of primes in nondecreasing order.”
关于欧几里得算法(31.2节): “The Euclidean algorithm is based on the following theorem: For any nonnegative integer and any positive integer , .”
关于扩展欧几里得算法(31.2节): “The EXTENDED-EUCLID procedure is a variation of the Euclidean algorithm. In addition to computing , it also computes integers and satisfying the equation .”
参见Wiki
- 整除 — 整除性的定义与性质
- 素数 — 素数的定义、判定与素数定理
- 算术基本定理 — 唯一素因数分解定理
- 最大公约数 — GCD的定义、性质与计算
- 欧几里得算法 — 辗转相除法的详细分析
- 贝祖定理 — 贝祖恒等式及其应用
- 模运算 — 模运算的基本定义与性质
- 模逆元 — 模逆元的定义、存在条件与计算
- 第31章_数论算法-章节汇总 — 第31章完整内容汇总
- 31.2 模运算与中国剩余定理 — 下一节:模运算与中国剩余定理