1. 费马小定理与扩展欧几里得在乘法逆元上的运用
费马小定理
扩展欧几里得
乘法逆元
针对 ba modn 这种除法取模,将它转换为乘法取模,我们需要用到之前的费马小定理和扩展欧几里得,这两种方法都可以将除法取模变为乘法取模,什么时候用哪种,后续会说到
费马小定理处理乘法逆元
由 f(n) 和 h(n) 相乘可以得到如下公式:
其中 phi(n) 为欧拉函数即小于n并且与n互质的个数
如果 n 为质数的话,
如此我们就可以通过快速幂来处理 b⋅a n−2
扩展欧几里得处理乘法逆元
由 f(n) 和 h(n) 相乘可以得到如下公式:
求出 x 后就可以将
在求解 x 的过程中
由 (6) 式可以看出要想 x 和
不管是费马小定理还是扩展欧几里得如果要进行乘法逆元的话必须要满足一个条件
何时使用处理乘法逆元
1. 当 n 为质数的时候一般用费马小定理,因为 b n−2 modn
2. 当时间限制比较紧的时候使用费马小定理,因为它可以使用快速幂进行求解
3. 其它的情况则是依照题目要求而定,当然,使用费马小定理处理乘法逆元的比较多,扩展欧几里得在求解方程式的整数解上有着强大的作用
2. 扩展欧几里得真解
欧几里得算法
在讲解扩展欧几里得之前
讲解欧几里得算法是必要的,所谓的欧几里得即求解最大公约数。
算法代码:
/*
作用:求解最大公约数(欧几里得)
方法:辗转相除法
*/
int gcd(int a, int b){
return b ? gbc(b, a % b) : a;
}
扩展欧几里得算法
扩展欧几里得可以求解出 a⋅x+b⋅y=gcd(a,b) 中一个满足方程式的 [ 整数
我们需要针对 (2) 和 (3) 找出他们之间的规律
很明显