一句话算法
初等数论第一章的主线是:用整除描述因子关系,用最大公约数整理共同因子,用素数分解建立整数的唯一结构。
问题模型
本章围绕整数之间的整除关系展开:
- 什么叫 b 整除 a。
- 带余除法为什么能把整数拆成“商和余数”。
- 最大公约数为什么可以通过辗转相除得到。
- 裴蜀定理为什么能表示最大公约数。
- 互质消去律和素数原子律为什么成立。
- 最小公倍数与最大公约数有什么关系。
- 算术基本定理为什么保证素因数分解唯一。
这些结论是后续同余、模逆元、线性同余方程、欧拉函数的基础。
核心直觉
整除关系关心的是“一个数能不能被另一个数整块切开”。
如果 a=bq,说明 a 由 q 个完整的 b 组成,没有剩余部分。最大公约数就是 a,b 共同拥有的最大整块单位;最小公倍数就是能同时由 a,b 拼出来的最小公共长度。
素数则是整数乘法结构里的“不可再拆单元”。算术基本定理说明:每个大于 1 的整数,都能唯一拆成这些不可再拆单元的乘积。
整除
“整除”
设 a,b 为整数,且 b=0。如果存在整数 q,使得:
则称 b 整除 a,记作 b∣a。否则称 b 不整除 a,记作 b∤a。
例如:
因为:
12=3×4但:
因为不存在整数 q 使得 12=5q。
整除的基本性质
-
若 a∣b 且 b∣a,则 a=b 或 a=−b。
-
若 a∣b 且 b∣c,则 a∣c。
-
若 a∣b 且 a∣c,则对任意整数 x,y,都有:
a∣(xb+yc)
第三条非常常用:如果 a 能整除两块材料 b,c,那么它也能整除它们的任意整数线性组合。
带余除法
“带余除法”
设 a,b 是整数,且 b>0。则存在唯一的整数 q,r,使得:
a=bq+r,0≤r<b其中 q 叫商,r 叫余数。
例如:
17=5×3+2所以 17 除以 5 的商是 3,余数是 2。
余数唯一性
假设:
a=bq+r=bq′+r′其中:
0≤r,r′<b两式相减:
b(q−q′)=r′−r左边能被 b 整除,所以 r′−r 也能被 b 整除。
但:
−(b−1)≤r′−r≤b−1在这个范围内,唯一能被 b 整除的整数是 0,所以:
进而:
因此商和余数唯一。
最大公约数
整数 a,b 的最大公约数记作:
也常写作:
gcd(a,b)如果:
那么:
(a,b)=(b,r)证明只看公因子集合是否相同:
-
若 d∣a 且 d∣b,则:
d∣(a−bq)=r
-
若 d∣b 且 d∣r,则:
d∣(bq+r)=a
所以 a,b 和 b,r 的公因子完全相同,最大公约数也相同。
这就是欧几里得算法的核心。
裴蜀定理
“裴蜀定理”
设整数 a,b 不同时为 0。则存在整数 x,y,使得:
(a,b)=ax+by
也就是说,最大公约数可以表示成 a,b 的整数线性组合。
证明直觉
辗转相除法每一步都把:
换成:
而余数满足:
如果下一层的最大公约数能写成 b 和 r 的线性组合,那么把 r=a−qb 代回去,就能写成 a 和 b 的线性组合。
算式推导
设:
且根据下一层已经知道:
(b,r)=bx′+ry′代入 r=a−qb:
(a,b)=(b,r)=bx′+(a−qb)y′=ay′+b(x′−qy′)令:
x=y′,y=x′−qy′则:
(a,b)=ax+by这也是扩展欧几里得算法的递推来源。
互质消去律
“互质消去律”
若:
a∣bc,(a,b)=1则:
证明:
由 (a,b)=1 和裴蜀定理,存在整数 x,y:
两边乘以 c:
acx+bcy=c因为:
又因为已知 a∣bc,所以:
因此:
a∣(acx+bcy)也就是:
直觉:a 和 b 没有共同因子,a 想要整除 bc,所需因子只能全部来自 c。
素数原子律
“素数原子律”
设 p 为素数。若:
则:
p∣aorp∣b
证明:
因为 p 是素数,所以 (p,a) 只有两种可能:
或:
若 (p,a)=p,则 p∣a,命题成立。
若 (p,a)=1,又已知 p∣ab,根据互质消去律:
所以:
p∣aorp∣b素数像乘法结构中的原子。如果它整除一个乘积,就必须完整地出现在某个因子里。
最小公倍数
a,b 的最小公倍数记作:
它是 a,b 的所有正公倍数中最小的那个。
最小公倍数整除任意公倍数
设:
若 n 是 a,b 的任意公倍数,则:
证明:
对 n 做带余除法:
n=mq+r,0≤r<m因为 a,b 都整除 n,也都整除 m,所以它们都整除:
若 r>0,那么 r 是一个比 m 更小的正公倍数,和 m 是最小公倍数矛盾。
所以:
因此:
最大公约数与最小公倍数
对非零整数 a,b:
(a,b)[a,b]=∣ab∣直觉:最大公约数拿走两个数共同拥有的因子,最小公倍数则把两个数需要的因子都补齐。二者相乘,正好对应 a,b 的因子总量。
算术基本定理
“算术基本定理”
任意大于 1 的整数都可以分解成若干个素数的乘积,并且如果不计素因子的顺序,这种分解是唯一的。
例如:
180=22×32×5唯一性证明
假设 n 有两种素因子分解:
n=p1p2⋯pr=q1q2⋯qs其中每个 pi,qj 都是素数。
因为:
所以:
p1∣q1q2⋯qs由素数原子律,p1 必须整除某个 qj。调整右边素因子的顺序,不妨设:
p1∣q1由于 p1,q1 都是素数,所以:
两边同时消去这个素因子:
p2⋯pr=q2⋯qs重复这个过程,最终两边所有素因子一一相同。因此分解唯一。
算法步骤
这章结论在做题时通常按下面链条使用:
- 用整除定义把 b∣a 转成 a=bq。
- 用带余除法写出 a=bq+r。
- 用 (a,b)=(b,r) 做辗转相除。
- 用裴蜀定理处理整数线性组合。
- 用互质消去律处理“乘积被整除”的问题。
- 用素数原子律把素数从乘积中拆出来。
- 用算术基本定理转成质因数分解。
复杂度分析
本页主要是数学定理,不是单个算法模板。
若对应到算法:
- 欧几里得算法求最大公约数:O(logmin(a,b))。
- 试除法分解质因数:O(n)。
- 筛法预处理素数:埃氏筛 O(nloglogn),线性筛 O(n)。
测试用例
辗转相除
求:
过程:
44=12×3+812=8×1+48=4×2+0所以:
(44,12)=4互质消去
已知:
且:
(6,35)=1则:
应用分类详解
初等数论第一章的结论是后续数论算法的基础工具。
一、整除与倍数判断
典型模式: 判断一个数是否能被另一个数整除,或构造倍数关系。
识别信号: 因数、倍数、整除、余数为 0。
核心建模: 把 b∣a 写成 a=bq。
二、最大公约数与互质
典型模式: 判断两个数是否有公共因子,或使用互质条件消去因子。
识别信号: 最大公约数、互质、约分、消去。
核心建模: 用 gcd 判断公共因子结构;当 gcd 为 1 时,可以使用互质消去律。
三、素因数分解
典型模式: 分析一个整数由哪些素数构成。
识别信号: 素数、质因子、因数个数、约数和。
核心建模: 先做素因数分解,再按每个素因子的指数独立处理。
四、线性同余与模逆元预备
典型模式: 需要解 ax+by=d 或在模意义下消去乘数。
识别信号: 裴蜀定理、扩展欧几里得、模逆元、一次同余方程。
核心建模: 用裴蜀定理理解“什么时候整数线性组合能凑出 gcd”。
经典例题
1. 最大公约数
给定 a,b,求 (a,b)。核心是反复使用:
(a,b)=(b,amodb)2. 判断互质
若 (a,b)=1,则 a,b 没有共同素因子,很多消去和约分结论才能成立。
3. 最小公倍数
给定 a,b,求 [a,b]。常用公式:
[a,b]=(a,b)∣ab∣为了避免溢出,程序里通常先除后乘。
4. 质因数分解
利用算术基本定理,把整数拆成:
n=p1e1p2e2⋯pkek约数个数、约数和、欧拉函数等都建立在这个表示上。
参考
- 本书最大公约数:
math/numberTheory/gcd/index.md
- 本书素数判定与素数筛:
math/numberTheory/prime/index.md
- 本书欧几里得定理及推论:
math/numberTheory/欧其里德定理及推论.md
- 本书同余与取模:
math/numberTheory/remainder/index.md