费马小定理与快速求逆
理解费马小定理的使用条件,并在素数模数下利用快速幂计算模逆元。
关键词费马小定理 · 模逆元 · 快速幂 · 素数
建议先了解
- 同余
- 模逆元
1. 定理解决什么问题
当模数是质数时,幂运算具有稳定的周期结构。费马小定理(Fermat's Little Theorem)可以用于化简大指数,也可以把求模逆元转化为模幂运算。
2. 定理内容与条件
若 是质数,且 ,则
条件不能省略:
- 模数 必须是质数;
- 不能被 整除,也就是 。
另一个常见等价形式是
它对任意整数 成立。
3. 为什么可以用它求逆元
由
可得
根据模逆元定义,
这不是普通的指数恒等式,而是在“ 为质数且 ”的条件下成立的模运算结论。
4. 完整例子:求
因为 7 是质数,且 7 不整除 3,所以
计算
并取模:
因此
验证:
5. 快速幂
直接计算 可能产生极大的中间整数。二进制快速幂会不断平方,并在每一步取模,把时间复杂度降低到与指数二进制位数成正比。
Python 已提供三参数 pow:
p = 7
a = 3
inverse = pow(a, p - 2, p)
print(inverse)
预期输出:
5
6. 与扩展欧几里得算法的区别
两种方法都能求模逆元,但适用范围不同:
| 方法 | 适用条件 | 主要特点 |
|---|---|---|
| 扩展欧几里得算法 | 适用于一般模数 | |
| 费马小定理 | 为质数且 | 可用快速幂实现 |
如果模数不是质数,不能直接把指数写成 。一般模数需要使用扩展欧几里得算法,或在满足条件时使用欧拉定理。
7. 常见误区
忘记检查模数是否为质数
例如模 8 时,不能声称所有非零 都满足 。
把结论误写成普通相等
费马小定理给出的是同余关系,不是整数等式:
而不是 。
8. 自测
- 费马小定理需要哪些条件?
- 如何用它表示 ?
- 为什么不能在模 15 下直接使用指数 求所有逆元?
pow(a, p - 2, p)与先计算巨大整数再取模相比有什么优势?
参考答案
- 是质数,且 。
- 。
- 15 不是质数,费马小定理的条件不成立。
- 快速幂会控制中间结果大小,并只需要对数级数量的平方与乘法。
上一篇:模逆元:模运算中的除法。
下一篇:素域 。