有理整数指的是整数环 Z\mathbb Z

# 最大公因数与最小公倍数

在整数论中,最大公约数与最小公倍数是两个重要的概念
取整数 a,ba,b,若整数 dd 满足

  • dad \mid a
  • dbd \mid b
    则称 dda,ba,b 的一个 公约数

在所有公约数中,最大的那个称为 a,ba,b最大公约数,记作 gcd(a,b)\gcd(a,b)

同样地,取整数 m,nm,n,若整数 ll 满足

  • mlm \mid l
  • nln \mid l
    则称 llm,nm,n 的一个 公倍数

在所有公倍数中,最小的那个称为 m,nm,n最小公倍数,记作 lcm(m,n)\mathrm{lcm}(m,n)


Euclidean 算法是一种用于计算两个整数的最大公约数的有效算法
其原理基于以下性质

命题
a,ba,b 为非负整数,且 b0b \neq 0,则 gcd(a,b)=gcd(b,amodb)\gcd(a,b) = \gcd(b,a \bmod b)

证明

d=gcd(a,b)d = \gcd(a,b),则 dad \mid adbd \mid b,所以 d(akb)d \mid (a - kb) 对任意整数 kk 成立
k=a/bk = \lfloor a/b \rfloor,则 akb=amodba - kb = a \bmod b,所以 d(amodb)d \mid (a \bmod b)
因此,ddbbamodba \bmod b 的公约数
d=gcd(b,amodb)d' = \gcd(b,a \bmod b),则 dbd' \mid bd(amodb)d' \mid (a \bmod b)
所以 d(kb+(amodb))=ad' \mid (kb + (a \bmod b)) = a
因此,dd'aabb 的公约数
由于 dddd' 分别是它们各自的最大公约数,所以 d=dd = d',即 gcd(a,b)=gcd(b,amodb)\gcd(a,b) = \gcd(b,a \bmod b)

Euclidean 算法的步骤如下

  1. 给定两个非负整数 aabb,其中 aba \geq b
  2. 计算 aa 除以 bb 的余数 rr
  3. 如果 r=0r = 0,则 gcd(a,b)=b\gcd(a,b) = b,算法结束
  4. 否则,令 a=ba = bb=rb = r,重复步骤 2 和 3

通过不断地用较小的数去除较大的数,并取余数,最终会得到最大公约数

示例
使用 Euclidean 算法计算 gcd(484,186)\gcd(484,186)

484÷186=2+112484 \div 186 = 2 + 112

186÷112=1+74186 \div 112 = 1 + 74

112÷74=1+38112 \div 74 = 1 + 38

74÷38=1+3674 \div 38 = 1 + 36

38÷36=1+238 \div 36 = 1 + 2

36÷2=18+036 \div 2 = 18 + 0

所以 gcd(484,186)=2\gcd(484,186) = 2


扩张 Euclidean 算法不仅可以计算最大公约数,还可以找到整数 x,yx,y 使得

ax+by=gcd(a,b)ax + by = \gcd(a,b)

此算法尤其在求解线性同余方程时非常有用,特别是对于互质问题 gcd(a,b)=1    ax+by=1\gcd(a,b) = 1 \iff ax + by = 1

通常利用矩阵代为计算,步骤如下

  1. 给定两个非负整数 aabb,其中 aba \geq b
  2. 设定矩阵

(10a01b)\begin{pmatrix} 1 & 0 & a \\ 0 & 1 & b \\ \end{pmatrix}

  1. 通过反复行基本变换,每次用第一行减去第二行乘以某个整数,但是保证第三个数一直非负
  2. 交换两行,重复步骤 3,直到第一行的第三个数为 gcd(a,b)\gcd(a,b),第二行的第三个数为 00
  3. 最终矩阵的第一行前两个数即为所求的 xxyy,即

(xygcd(a,b)mn0)\begin{pmatrix} x & y & \gcd(a,b) \\ m & n & 0 \\ \end{pmatrix}

其中 x,yx,y 满足 ax+by=gcd(a,b)ax + by = \gcd(a,b)m,nm,n 满足 am+bn=0am + bn = 0

示例
使用扩张 Euclidean 算法计算 gcd(484,186)\gcd(484,186) 并找到整数 x,yx,y 使得 484x+186y=gcd(484,186)484x + 186y = \gcd(484,186)

初始矩阵

(1048401186)\begin{pmatrix} 1 & 0 & 484 \\ 0 & 1 & 186 \\ \end{pmatrix}

经过一系列行基本变换,最终得到

(5132110)\begin{pmatrix} 5 & -13 & 2 \\ -1 & 1 & 0 \\ \end{pmatrix}

所以 gcd(484,186)=2\gcd(484,186) = 2,且 4845+186(13)=2484 \cdot 5 + 186 \cdot (-13) = 2

# 同余方程

同余关系是一种在整数上的等价关系,为整数论的核心分析要素

取整数 mm
若整数 a,ba,b 满足:aba-b 能被 mm 整除
则称 aabb 关于模 mm 同余 (Congruent modulo mm),记作

ab(modm)a \equiv b \pmod{m}

同余关系之间保有加法和乘法,即若 ab(modm), ab(modm)a \equiv b \pmod{m},\ a' \equiv b' \pmod{m},则有

  • a+ab+b(modm)a + a' \equiv b + b' \pmod{m}

  • aabb(modm)a a' \equiv b b' \pmod{m}

利用同余关系的性质,可以实现快速判断一个数字对 991111 的同余关系
将整数 aa 写为十进制展开形式

a=an10n+an110n1++a110+a0a = a_n 10^n + a_{n-1} 10^{n-1} + \ldots + a_1 10 + a_0

由于 10k1(mod9)10^k \equiv 1 \pmod{9},所以

aan+an1++a1+a0(mod9)a \equiv a_n + a_{n-1} + \ldots + a_1 + a_0 \pmod{9}

同理,由于 10k(1)k(mod11)10^k \equiv (-1)^k \pmod{11},所以

ak=0nak(1)k(mod11)a \equiv \sum_{k=0}^{n} a_k (-1)^k \pmod{11}


同余方程指的是形如

f(x)0(modm)f(x) \equiv 0 \pmod{m}

的方程,其中 f(x)f(x) 为整数系数多项式

解同余方程的本质是解出符合同余关系的整数 xx

xx 是同余方程 f(x)0(modm)f(x) \equiv 0 \pmod{m} 的解,那么关于模 mm 的等价类也是解

通常来说,同余方程最主要的是考察一次形式的多项式,即线性同余方程

axb(modm)ax \equiv b \pmod{m}

针对线性同余方程,其解的存在性由以下命题给出

命题
gcd(a,m)=1\gcd(a,m) = 1,则线性同余方程 axb(modm)ax \equiv b \pmod{m} 有唯一解

解线性同余方程实际上是在利用 Euclidean 算法

示例
解线性同余方程 3x \equiv 4 \pmod

由于 gcd(3,7)=1\gcd(3,7) = 1,所以方程有唯一解
利用扩展 Euclidean 算法,得到

1=53271 = 5 \cdot 3 - 2 \cdot 7

所以 351(mod7)3 \cdot 5 \equiv 1 \pmod{7}
两边乘以 44,得到

3204(mod7)3 \cdot 20 \equiv 4 \pmod{7}

所以 x \equiv 20 \equiv 6 \pmod

# Euler 函数

定义
nn 为正整数,定义函数 φ(n)\varphi(n) 为小于等于 nn 且与 nn 互素的正整数的个数
φ\varphiEuler 函数 (Euler's Totient Function)「オイラーのトーシェント関数」

命题
nn 的素因子分解为 n=p1k1p2k2pmkmn = p_1^{k_1} p_2^{k_2} \cdots p_m^{k_m},则

φ(n)=n(11p1)(11p2)(11pm)\varphi(n) = n \left(1 - \frac{1}{p_1}\right)\left(1 - \frac{1}{p_2}\right) \cdots \left(1 - \frac{1}{p_m}\right)

命题
m,nm,n 为正整数,且 gcd(m,n)=1\gcd(m,n) = 1,则

φ(mn)=φ(m)φ(n)\varphi(mn) = \varphi(m) \varphi(n)

命题
pp 为素数,kk 为正整数,则

φ(pk)=pkpk1=pk(11p)\varphi(p^k) = p^k - p^{k-1} = p^k \left(1 - \frac{1}{p}\right)

命题
n3n \geq 3,则

dnφ(d)=n\sum_{d \mid n} \varphi(d) = n

其中求和是对 nn 的所有正因子 dd 进行的
特别地,当 nn 为素数 pp 时,有

φ(1)+φ(p)=1+(p1)=p\varphi(1) + \varphi(p) = 1 + (p - 1) = p