有理整数指的是整数环 Z
# 最大公因数与最小公倍数
在整数论中,最大公约数与最小公倍数是两个重要的概念
取整数 a,b,若整数 d 满足
- d∣a
- d∣b
则称 d 为 a,b 的一个 公约数
在所有公约数中,最大的那个称为 a,b 的 最大公约数,记作 gcd(a,b)
同样地,取整数 m,n,若整数 l 满足
- m∣l
- n∣l
则称 l 为 m,n 的一个 公倍数
在所有公倍数中,最小的那个称为 m,n 的 最小公倍数,记作 lcm(m,n)
Euclidean 算法是一种用于计算两个整数的最大公约数的有效算法
其原理基于以下性质
命题
设 a,b 为非负整数,且 b=0,则 gcd(a,b)=gcd(b,amodb)
证明
设 d=gcd(a,b),则 d∣a 且 d∣b,所以 d∣(a−kb) 对任意整数 k 成立
取 k=⌊a/b⌋,则 a−kb=amodb,所以 d∣(amodb)
因此,d 是 b 和 amodb 的公约数
设 d′=gcd(b,amodb),则 d′∣b 且 d′∣(amodb)
所以 d′∣(kb+(amodb))=a
因此,d′ 是 a 和 b 的公约数
由于 d 和 d′ 分别是它们各自的最大公约数,所以 d=d′,即 gcd(a,b)=gcd(b,amodb)
Euclidean 算法的步骤如下
- 给定两个非负整数 a 和 b,其中 a≥b
- 计算 a 除以 b 的余数 r
- 如果 r=0,则 gcd(a,b)=b,算法结束
- 否则,令 a=b,b=r,重复步骤 2 和 3
通过不断地用较小的数去除较大的数,并取余数,最终会得到最大公约数
示例
使用 Euclidean 算法计算 gcd(484,186)
解
484÷186=2+112
186÷112=1+74
112÷74=1+38
74÷38=1+36
38÷36=1+2
36÷2=18+0
所以 gcd(484,186)=2
扩张 Euclidean 算法不仅可以计算最大公约数,还可以找到整数 x,y 使得
ax+by=gcd(a,b)
此算法尤其在求解线性同余方程时非常有用,特别是对于互质问题 gcd(a,b)=1⟺ax+by=1
通常利用矩阵代为计算,步骤如下
- 给定两个非负整数 a 和 b,其中 a≥b
- 设定矩阵
(1001ab)
- 通过反复行基本变换,每次用第一行减去第二行乘以某个整数,但是保证第三个数一直非负
- 交换两行,重复步骤 3,直到第一行的第三个数为 gcd(a,b),第二行的第三个数为 0
- 最终矩阵的第一行前两个数即为所求的 x 和 y,即
(xmyngcd(a,b)0)
其中 x,y 满足 ax+by=gcd(a,b),m,n 满足 am+bn=0
示例
使用扩张 Euclidean 算法计算 gcd(484,186) 并找到整数 x,y 使得 484x+186y=gcd(484,186)
解
初始矩阵
(1001484186)
经过一系列行基本变换,最终得到
(5−1−13120)
所以 gcd(484,186)=2,且 484⋅5+186⋅(−13)=2
# 同余方程
同余关系是一种在整数上的等价关系,为整数论的核心分析要素
取整数 m
若整数 a,b 满足:a−b 能被 m 整除
则称 a 与 b 关于模 m 同余 (Congruent modulo m),记作
a≡b(modm)
同余关系之间保有加法和乘法,即若 a≡b(modm), a′≡b′(modm),则有
利用同余关系的性质,可以实现快速判断一个数字对 9 或 11 的同余关系
将整数 a 写为十进制展开形式
a=an10n+an−110n−1+…+a110+a0
由于 10k≡1(mod9),所以
a≡an+an−1+…+a1+a0(mod9)
同理,由于 10k≡(−1)k(mod11),所以
a≡k=0∑nak(−1)k(mod11)
同余方程指的是形如
f(x)≡0(modm)
的方程,其中 f(x) 为整数系数多项式
解同余方程的本质是解出符合同余关系的整数 x
若 x 是同余方程 f(x)≡0(modm) 的解,那么关于模 m 的等价类也是解
通常来说,同余方程最主要的是考察一次形式的多项式,即线性同余方程
ax≡b(modm)
针对线性同余方程,其解的存在性由以下命题给出
命题
若 gcd(a,m)=1,则线性同余方程 ax≡b(modm) 有唯一解
解线性同余方程实际上是在利用 Euclidean 算法
示例
解线性同余方程 3x \equiv 4 \pmod
解
由于 gcd(3,7)=1,所以方程有唯一解
利用扩展 Euclidean 算法,得到
1=5⋅3−2⋅7
所以 3⋅5≡1(mod7)
两边乘以 4,得到
3⋅20≡4(mod7)
所以 x \equiv 20 \equiv 6 \pmod
# Euler 函数
定义
设 n 为正整数,定义函数 φ(n) 为小于等于 n 且与 n 互素的正整数的个数
称 φ 为 Euler 函数 (Euler's Totient Function)「オイラーのトーシェント関数」
命题
设 n 的素因子分解为 n=p1k1p2k2⋯pmkm,则
φ(n)=n(1−p11)(1−p21)⋯(1−pm1)
命题
设 m,n 为正整数,且 gcd(m,n)=1,则
φ(mn)=φ(m)φ(n)
命题
设 p 为素数,k 为正整数,则
φ(pk)=pk−pk−1=pk(1−p1)
命题
设 n≥3,则
d∣n∑φ(d)=n
其中求和是对 n 的所有正因子 d 进行的
特别地,当 n 为素数 p 时,有
φ(1)+φ(p)=1+(p−1)=p