08 费马小定理
学习目标
学完这一节,你应该能够:
- 说出费马小定理的条件和结论;
- 理解为什么把 1,2,…,p−1 全部乘上 a 后,只是把这些非零剩余类重新排列;
- 一步一步证明费马小定理;
- 理解为什么费马小定理能够得到素数模下的逆元公式。
1. 费马小定理
设 p 是素数,并且:
p∤a
也就是 a 不是 p 的倍数。
那么:
ap−1≡1(modp)
这就是费马小定理。
因为 p 是素数且 p∤a,所以:
gcd(a,p)=1
因此前面已经知道:
a 在模 p 下存在乘法逆元。
2. 先观察一个例子
取:
p=7,a=3
模 7 的非零余数是:
1,2,3,4,5,6
把它们全部乘 3:
3,6,9,12,15,18
分别模 7:
3,6,2,5,1,4
可以发现:
3,6,2,5,1,4
虽然顺序改变了,但仍然恰好是:
1,2,3,4,5,6
每个出现一次。
证明费马小定理的关键,就是证明这种现象对于任意满足条件的 a,p 都成立。
3. 为什么乘上 a 后不会出现 0
考虑:
a,2a,3a,…,(p−1)a
假设其中某一项 ai 模 p 后等于 0:
ai≡0(modp)
因为:
gcd(a,p)=1
所以 a 在模 p 下存在逆元 a−1。
两边同时乘 a−1:
a−1ai≡a−1⋅0(modp)
得到:
i≡0(modp)
但是:
1≤i≤p−1
这个范围中没有任何整数模 p 等于 0。
产生矛盾。
所以:
a,2a,…,(p−1)a 模 p 后都不会得到 0。
4. 为什么不会出现两个相同的余数
假设:
ai≡aj(modp)
因为 a 在模 p 下存在逆元,所以两边同时乘 a−1:
a−1ai≡a−1aj(modp)
于是:
i≡j(modp)
但:
1≤i,j≤p−1
两个都在同一个完整的非零余数范围中。
所以:
i=j
因此:
不同的 i,j 不可能在乘上 a 后得到相同的模 p 余数。
5. 为什么这就说明只是重新排列
一共有:
p−1
个数:
a,2a,…,(p−1)a
前面已经证明:
- 它们模 p 后都不是 0;
- 它们模 p 后两两不同。
而模 p 的非零余数总共也只有:
1,2,…,p−1
这 p−1 个。
因此:
这 p−1 个结果不可能多出别的非零余数,也不可能漏掉某个非零余数。
所以它们恰好只是:
1,2,…,p−1
的一次重新排列。
6. 把两边所有数乘起来
既然两边只是顺序不同,那么乘积在模 p 下相同:
a⋅2a⋅3a⋯(p−1)a≡1⋅2⋅3⋯(p−1)(modp)
左边共有 p−1 个因子 a,所以:
a⋅2a⋯(p−1)a=ap−1(p−1)!
右边:
1⋅2⋯(p−1)=(p−1)!
因此:
ap−1(p−1)!≡(p−1)!(modp)
7. 为什么可以消掉 (p−1)!
这里不能直接使用普通除法。
我们需要先说明:
(p−1)!
在模 p 下存在逆元。
对于:
1,2,…,p−1
中的任意一个数 i,都有:
1≤i<p
因为 p 是素数,所以:
gcd(i,p)=1
因此每个 i 在模 p 下都有逆元 i−1:
ii−1≡1(modp)
把这些等式全部相乘:
(1⋅2⋯(p−1))(1−1⋅2−1⋯(p−1)−1)≡1(modp)
其中:
1⋅2⋯(p−1)=(p−1)!
所以:
1−1⋅2−1⋯(p−1)−1
就是 (p−1)! 的一个逆元。
因此 (p−1)! 确实可以在模 p 下消去。
从:
ap−1(p−1)!≡(p−1)!(modp)
两边同时乘 ((p−1)!)−1:
ap−1≡1(modp)
所以:
ap−1≡1(modp)
费马小定理得证。
8. 用例子检查
取:
p=7,a=3
费马小定理告诉我们:
37−1≡1(mod7)
也就是:
36≡1(mod7)
而:
36=729
并且:
729=7×104+1
所以:
729≡1(mod7)
与定理一致。
9. 为什么费马小定理能得到逆元公式
费马小定理:
ap−1≡1(modp)
因为:
ap−1=a⋅ap−2
所以:
a⋅ap−2≡1(modp)
而乘法逆元的定义是:
如果:
ax≡1(modp)
那么 x 就是 a 在模 p 下的逆元。
现在:
ap−2
正好满足这个条件。
因此:
a−1≡ap−2(modp)
使用这个公式的前提是:
10. 例子:求 3 在模 7 下的逆元
因为 7 是素数,并且:
7∤3
所以:
3−1≡37−2(mod7)
也就是:
3−1≡35(mod7)
计算:
35=243
而:
243=7×34+5
所以:
35≡5(mod7)
因此:
3−1≡5(mod7)
11. 现在还剩下一个计算问题
公式:
a−1≡ap−2(modp)
已经告诉我们逆元可以通过幂来得到。
但是如果 p 很大,例如接近 109,那么指数 p−2 也非常大。
如果真的连续乘 p−2 次,会非常慢。
下一章学习快速幂,把计算:
ap−2modp
的乘法次数降到大约:
O(logp)
12. 小练习
练习 1
为什么费马小定理要求:
p∤a
练习 2
当 p=5,a=2 时,验证费马小定理。
练习 3
为什么证明中不能直接从:
ap−1(p−1)!≡(p−1)!(modp)
说“把 (p−1)! 约掉”?
13. 答案
练习 1
因为需要:
gcd(a,p)=1
这样 a 才存在逆元,乘上 a 后才能在非零剩余类之间形成一一对应。
练习 2
24=16≡1(mod5)
练习 3
因为模运算中的约分不是无条件成立的。必须先确认被消去的因子与模数互质,也就是它存在逆元。
有帮助,赞一个