8.3 模运算、逆元与中国剩余定理
第 8.2 节不断使用余数缩小最大公约数问题。模运算换了一个观察角度:余数不再只是临时产生的副产品,我们要把余数相同的全部整数归为一类。
这样就能把无限多个整数压缩成一个有限的运算系统。
固定一个正整数 n,称为。对整数 a,b,如果
n∣(a−b), 就写作
a≡b(modn), 读作“a 与 b 模 n 同余”。
等价地说,a 与 b 除以 n 后得到相同余数。
模 5 的例子
因为
17−2=15=5⋅3, 所以
17≡2(mod5). 两者除以 5 后的余数都是 2。
负整数也属于余数类。因为
所以
−3≡2(mod5). 符号 = 仍然表示普通相等。同余是另一种关系:虽然 17=2,但 17≡2(mod5)。
每个整数都恰好与下面集合中的一个元素模 n 同余:
{0,1,2,…,n−1}. 这些标准代表叫作。
模 5 时,2 所在的剩余类包含
…,−8,−3,2,7,12,17,… 因为相邻两项相差 5。
同余是第 4 章学习过的等价关系:
- a≡a(modn);
- 若 a≡b(modn),则 b≡a(modn);
- 若 a≡b(modn) 且 b≡c(modn),则 a≡c(modn)。
因此,同余把 Z 划分成 n 个互不相交的剩余类。
假设
a≡b(modn)且c≡d(modn). 那么
a+c≡b+d(modn) 以及
ac≡bd(modn). 对加法,
(a+c)−(b+d)=(a−b)+(c−d), 右侧能够被 n 整除。
对乘法,把差改写为
ac−bd=c(a−b)+b(c−d). 右侧两项都能被 n 整除,所以它们的和也能被 n 整除。
因此,我们既可以在运算前取余,也可以在运算后取余。
例子:缩小一个大乘积
计算 38⋅47(mod7)。
先分别缩小因子:
38≡3(mod7),47≡5(mod7). 于是
38⋅47≡3⋅5=15≡1(mod7). 整个过程不需要真的计算大乘积。
同余乘法可以反复使用。例如,
7≡2(mod5), 所以
74≡24=16≡1(mod5). 面对很大的指数时,可以使用重复平方,并对底数和每个中间平方及时取余。第 8.4 节会把这种方法用于 RSA。
让整数沿剩余时钟旋转,再在两个同步圆环上组合加法与乘法移动。拖动到负数或超过模数的数值时,系统会保留完整的同余轨迹;碰撞检测器则同时用“余数相同”和“差能被模数整除”解释结果。
在普通有理数中,乘以非零数 a 可以通过乘以 1/a 撤销。在模运算中,只有找到合适的剩余,才能进行类似的“除法”。
如果整数 x 满足
ax≡1(modn), 就称 x 是 a 。
也可以写作
x≡a−1(modn). 这里的 a−1 表示模逆元,不是实数分数 1/a。
逆元什么时候存在
逆元存在,当且仅当
gcd(a,n)=1. 最大公约数为 1 的两个整数叫作。
若 gcd(a,n)=1,贝祖等式给出整数 x,y,使得
模 n 取余后,ny 这一整倍数消失,得到
ax≡1(modn). 所以 a 的贝祖系数就是一个逆元。
反过来,若 ax≡1(modn),则 ax−1 能被 n 整除。因此存在整数 y,满足
a,n 的任意公因数都必须整除 1,所以最大公约数只能是 1。
求 7 模 26 的逆元。
欧几里得算法给出
2675=3⋅7+5,=1⋅5+2,=2⋅2+1. 反向代入:
1=5−2⋅2=5−2(7−5)=3⋅5−2⋅7=3(26−3⋅7)−2⋅7=3⋅26−11⋅7. 因此
−11⋅7≡1(mod26). −11 的标准非负代表是 15,所以
7−1≡15(mod26). 检查:
7⋅15=105=4⋅26+1. 要解
7x≡5(mod26), 在两边乘以逆元 15:
x≡15⋅5=75≡23(mod26). 这个过程很像普通除法,但它之所以可行,是因为 7 与 26 互素。
更一般地,同余方程 ax≡b(modn) 有解,当且仅当
gcd(a,n)∣b. 这正是第 8.2 节线性组合判据的模运算形式。
假设一个整数要同时满足三个时钟:
x≡2(mod3), x≡3(mod5), 以及
x≡2(mod7). 模数 3,5,7 :任意两个不同模数的最大公约数都是 1。
说明:若系统
x≡ai(modni)(1≤i≤k) 的正模数两两互素,那么它在模
N=i=1∏kni 意义下恰有一个解。
“模 N 意义下恰有一个”表示所有整数解都属于同一个剩余类 x0+Nt。
对每条同余式定义
Ni=niN. 由于各模数两两互素,
gcd(Ni,ni)=1, 所以 Ni 模 ni 存在逆元 yi:
Niyi≡1(modni). 最终
x≡i=1∑kaiNiyi(modN). 每个乘积 Niyi 都像一个选择器:在时钟 ni 上等于 1,在其他时钟上则因为包含相应模数因子而等于 0。
完整计算示例
这里
N=3⋅5⋅7=105. 对模 3,N1=35 且 35≡2(mod3)。2 的逆元为 2,因为 2⋅2≡1(mod3)。
对模 5,N2=21≡1(mod5),所以逆元为 1。
对模 7,N3=15≡1(mod7),所以逆元也为 1。
因此
x≡2⋅35⋅2+3⋅21⋅1+2⋅15⋅1=233≡23(mod105). 检查三个时钟:
23mod3=2,23mod5=3,23mod7=2. 在两到三个独立循环信标上设置目标余数,再沿同一条整数时间线扫描,直到全部信号对齐。你可以在枚举模式与构造选择器模式之间切换,既观察解为什么以互素模数的乘积为周期重复,也看到中国剩余定理怎样直接构造答案。
同余按照余数给整数分类;模除法需要互素条件下的逆元;中国剩余定理则把两两互素的多条余数条件合并成模乘积意义下唯一的一类。
现在我们已经能够在有限剩余系统中进行乘法与幂运算,通过贝祖系数寻找逆元,并通过中国剩余定理合并同余条件。第 8.4 节将把这些工具组装成一个小型 RSA 公钥系统。