1.扩展gcd
ax≡1(mod m) , ax+my=1, 调用一次扩展gcd就可以求出x。
2.费马小定理
如果gcd(a,p)= 1, 那么a^(p-1) ≡ 1(mod p)
也就是a^(p-2)*a ≡ 1(mod)p, a^(p-2)就是a的逆元,调用快速幂算出a^(p-2)即可
3.欧拉定理
f(x):[1-x-1]内与x互素的数的个数, a^f(p) ≡ 1(mod p) (仍然要求a,p互素), a的逆元为a^(f(p)-1)
4.线性递推
求1-x对p的逆元。1的逆元是1, 对于i, 设p = ki+r (r
kr^-1 + i^-1 ≡ 0(mod p), i^-1 = -k*r^-1, i^-1 ≡ -(p/i)*(p%i)^-1 (mod p)
void inverse(){ memset(inv,0,sizeof(inv)); inv[1]=1; for (int i = 2;i <= maxn; i++){ inv[i] = inv[mod%i]*(mod-mod/i)%mod; } }
可惜前几天组队赛时一种方法也不会