及ax=1(modn) 求解x(称为a关于模p的乘法逆元)
分析有: 原式等价于ax-1=yn, 求解x,y; 及exgcd(x,y) 并且gcd(x,y)=1 也就是互质时有解;
exgcd求逆元代码:
void exgcd(int a,int b,int &d,int &x,int &y){ if(!b){ d=a; x=1,y=0; } else { gcd(b,a%b,d,y,x); y-=x*(a/b); } }费马小定理求逆元(前提m是质素的,且a不是m的倍数):
所以 就是a关于模m的逆元;然后快速幂
对于分数的形式 a/b(mod m) 因为b*b^(m-2)=1(mod m) 所以 a/b==a/b*(b*b^(m-2)) ==a*b^(m-2) (mod m)
还一个方法
当p是个质数的时候有
inv(a) = (p - p / a) * inv(p % a) % p
证明:
设x = p % a,y = p / a
于是有 x + y * a = p
(x + y * a) % p = 0
移项得 x % p = (-y) * a % p
x * inv(a) % p = (-y) % p
inv(a) = (p - y) * inv(x) % p
于是 inv(a) = (p - p / a) * inv(p % a) % p
然后一直递归到1为止,因为1的逆元就是1