求逆元问题是数论中一类比较基础的题目,它常常会与组合数,质数等联系起来。今天我们就来总结一下求逆元的方法,根据数据范围不同有三种,接下来就一一介绍。
-------------------------------------------------------------------------------
方法1.通过扩展欧几里得算法求逆元
这个算法很常见,在这里就不再累述,直接给出代码。
- 求解ax+by=gcd(a,b),亦即ax≡1(mod b)。函数返回值是a,b的最大公约数,而x即a的逆元。
- 注意a, b不能写反了。
- gcd(a, b) > 1时逆不存在
1 int ex_gcd(int a, int b, int &x, int &y) { 2 int ret, tmp; 3 if (b == 0) { 4 x = 1; 5 y = 0; 6 return a; 7 } 8 ret = ex_gcd(b, a % b, x, y); 9 tmp = x; 10 x = y; 11 y = tmp - a / b * y; 12 return ret; 13 }