同余是什么 | 自在学同余是什么
同余,就是把整数放进一个“循环世界”里看。
在普通整数世界里,3 和 15 当然不是同一个数。
但如果我们看的是 12 小时制的时钟,它们就落在同一个位置。
因为:
15=12+3
也就是说,15 除以 12 的余数是 。
3
而 3 除以 12 的余数也是 3。
所以,在“模 12”的世界里,我们可以说:
15≡3(mod12) 它是在说:如果只看除以某个数后的余数,它们是一样的。
大数余数计算、整除性判断、循环问题、密码学里的模运算,背后都离不开同余。
从时钟说起
很多人第一次学同余,会觉得符号有点抽象。其实我们不必先急着看符号,先看时钟就够了。
13 点=1 点 15 点=3 点 25 点=1 点 所以我们关心的不是这个数本身有多大,而是它除以 12 后落在哪个位置。
15÷12 余 3 27÷12 余 3 −9÷12 也可以看作落在 3 的位置 …,−9,3,15,27,… 这些数在模 12 的意义下,都属于同一类。
同余的定义
同余的定义:设 m 是正整数,a,b 是整数。
如果 m 能整除 a−b,也就是
m∣(a−b)那么就说 a 和 b 关于模 m 同余,记作:
a≡b(modm)如果 m 不能整除 a−b,就记作:
a≡b(modm)17≡5(mod6) −1≡11(mod4) −1−11=−12 如果 a 除以 m 的余数是 r,并且
a≡r(modm) 这个 r 叫做 a 关于模 m 的最小非负余数。
你可以把它理解成:a 在模 m 世界里的“标准编号”。
同余到底在分什么类
同余的真正的厉害之处,不只是写一个符号。它其实是在把所有整数分组。
[0]4: …,−8,−4,0,4,8,… [1]4: …,−7,−3,1,5,9,… [2]4: …,−6,−2,2,6,10,… [3]4: …,−5,−1,3,7,11,… 每一类里的数,模 4 意义下都一样。这就是剩余类。
更一般地来说,模 m 时,一共有 m 个剩余类:
[0]m,[1]m,…,[m−1]m 它们互不重叠,又合起来覆盖所有整数。
所以同余不是“算余数的小技巧”。
同余为什么像等号
a≡a(modm) a≡b(modm) b≡a(modm) 因为 a−b 能被 m 整除,那么 b−a=−(a−b) 也能被 m 整除。
a≡b(modm) b≡c(modm) a≡c(modm) a 和 b 余数一样,b 和 c 余数一样,那 a 和 c 的余数当然也一样。
它允许我们把一堆不同的整数,看成模 m 世界里的同一种对象。
同余的运算规则
如果
a≡b(modm),c≡d(modm)那么:
a+c≡b+d(modm)a−c≡b−d(modm)ac≡bd(modm)并且对正整数 n,还有:
an≡bn(modm)2026×2027mod7 2026≡3(mod7) 2027≡4(mod7) 2026×2027≡3×4=12≡5(mod7) 但是,除法不能随便做。
从
ac≡bc(modm)不能总是推出
a≡b(modm)反例:
2×3≡2×0(mod6)因为两边都是 0(mod6)。
但:
3≡0(mod6)所以同余里可以放心加、减、乘。
但想“约掉”一个数时,要先看这个数和模是否互质。
gcd(c,m)=1 ac≡bc(modm) a≡b(modm) 很多同余题做错,错就错在把除法当成普通等式里的除法。
完全剩余系
我们已经知道,模 m 会把整数分成 m 类。
如果你从每一类里各选一个代表,就得到一个完全剩余系。
0,1,2,…,m−1 0,1,2,3,4 1,2,3,4,5 −2,−1,0,1,2 一个常用事实:
如果 gcd(a,m)=1,那么把一个完全剩余系里的每个数都乘以 a,再对 m 取余,仍然会得到一个完全剩余系。
简单说:当 a 和 m 互质时,乘以 a 不会把不同的余数类撞到一起。
线性同余方程
ax≡b(modm) 它的问题是:要找哪些整数 x,让 ax 除以 m 后和 b 余数相同。
ax≡b(modm) gcd(a,m)∣b 也就是说,a 和 m 的最大公因数,必须整除右边的 b。
4x≡3(mod6) gcd(4,6)=2 要让 4x−3 被 6 整除,几乎不可能,因为 4x−3 永远是奇数。
gcd(a,m)=1 ax≡b(modm) 这时我们可以找 a 关于模 m 的乘法逆元。
a⋅a−1≡1(modm)
例题精讲
例题一:判断同余是否成立
(1)37≡13(mod8)
(2)−15≡9(mod6)
(3)100≡1(mod9)
看第一个。
37−13=24而:
24=8×3所以:
37≡13(mod8)成立。
看第二个。
−15−9=−24而:
−24=6×(−4)所以:
看第三个。
100−1=99而:
99=9×11所以:
例题二:计算大数幂的余数
题目:计算 3100mod7。
直接算 3100 没意义,数字太大。
我们先找 3n 模 7 的规律。
31≡3(mod7)32=9≡2(mod7)33≡3×2=6≡−1(mod7)继续:
36≡(−1)2=1(mod因为:
100=6×16+4所以:
3100=又因为:
34=81≡4(mod7)所以:
例题三:用同余证明整除性
7∣(32n+1+2n+2) 我们只需要证明:
32n+1+2n+2≡0(mod7)注意到:
32=9≡2(mod7)所以:
于是:
32n+1=3⋅32n两项相加:
32n+1+2n+例题四:解线性同余方程
5x≡3(mod14) 先看有没有解。
gcd(5,14)=1所以方程在模 14 意义下有唯一解。
找 5 关于模 14 的逆元。
因为:
5×3=15≡1(mod14)所以:
5−1≡3(mod14)原方程两边乘以 3:
x≡3×3=9(mod14)验证:
5×9=45而:
45=14×3+3所以:
例题五:用同余解释整除判别
题目:不做大数除法,判断 123456789 能否被 9 整除。
关键是:
10≡1(mod9)所以:
10k≡1(mod9)这意味着,一个十进制数关于模 9 的余数,等于它各位数字之和关于模 9 的余数。
计算数字和:
1+2+3+4+5+6+7+因此:
123456789≡0(mod9)所以它能被 9 整除。
例题六:无解的线性同余方程
4x≡3(mod6) 计算:
gcd(4,6)=2线性同余方程
ax≡b(modm)有解的条件是:
gcd(a,m)∣b这里需要:
2∣3但这不成立。
所以方程无解。
也可以直接看:
4x 永远是偶数。
4x−3 永远是奇数。
它不可能被 6 整除。
所以无解是很自然的。
同余为什么重要
它真正重要的地方在于:它让我们可以在一个有限的循环系统里处理整数。
现代密码学里大量使用的 RSA,也离不开模运算和同余。
当然,RSA 还需要欧拉函数、欧拉定理、大素数分解等内容。
你理解了同余,后面很多数论内容都会突然变得顺眼很多。
练习
练习一:求 7200mod11。
先找周期。
71≡7(mod11)72=49≡5(mod11)73≡7×5=35≡2(mod11)74≡7×2=14≡3(mod11)75≡7×3=21≡−1(mod11)所以:
710≡1(mod11)而:
200=10×20所以:
7200=(710)20≡120=答案是 1。
练习二:解方程 7x≡2(mod10),并找出 −20 到 20 范围内的所有解。
因为:
gcd(7,10)=1所以有唯一解。
找 7 的逆元:
7×3=21≡1(mod10)所以:
7−1≡3(mod10)两边乘以 3:
x≡3×2=6(mod10)所以:
x=6+10k,k∈Z在 −20 到 20 范围内,解是:
−14,−4,6,1613∣(46n−1) 先看基础周期:
41≡4(mod13)42=16≡3(mod13)43≡4×3=12≡−1(mod13)所以:
46≡1(mod13)因为:
46≡1(mod13)所以:
46n=(46)n≡1n=于是:
46n−1≡0(mod13)也就是:
13∣(46n−1)
要点收束
a≡b(modm)⟺m∣(a−b) a 和 b 除以 m 的余数相同
- 大数可以化小
- 幂次可以找周期
- 整除性可以变成余数问题
- 线性方程可以在模世界里求解
只有当要约掉的数和模互质时,才能像普通等式那样放心约。
同余不是“余数的小技巧”,而是把无限整数压缩进有限循环结构的一种语言。
后面学欧拉定理、中国剩余定理、RSA 时,你会不断看到这句话的影子。
−15≡9(mod6)
100≡1(mod9)
7
)
(36)16×
34
3100≡116×34 3100≡4(mod7)
32n=(32)n≡2n(mod7)
≡
3⋅
2n
(mod7)
2n+2=4⋅2n 2
≡
3⋅
2n+
4⋅
2n=
7⋅
2n≡
0
(mod7)
所以原式一定能被 7 整除。□
5×9≡3(mod14)
x=9+14k,k∈Z 8
+
9=
45
所以 45≡0(mod9)。
1
(mod11)
1
(mod13)