乘法逆元
a∗x ≡ 1 (mod p)
① 扩展欧几里得:(除了扩展欧几里得,其他三个只适用于p为质数)
ll exgcd(ll a, ll b, ll &x, ll &y){
if(b == 0){
x = 1; y = 0;
return a;
}
ll gcd = exgcd(b, a%b, y, x);
y -= a/b*x;
return gcd;
}
② 费马小定理:若a,互质x = a^(p-2)用快速幂即可
int quickpow(int a, int n, int mod){
ll res = a%mod, sum = 1;
whiel(n){
if(n&1) sum = (sum*res)%mod;
res = (res*res)%mod;
n/=2;
}
return sum;
}
③ 线性递推(从前往后)
给定n,p求1~n中所有整数在模p意义下的乘法逆元。(n < p)
ax≡1(mod p) 即求a=1~n时逆元x
invers[1] = 1;
for(int i = 2; i <= n; i++){
invers[i] = ((-p/i * invers[p%i]) % p + p) % p;
}
④ 递推求阶乘逆元(倒着推)
扩欧求一下invers[n]
for(int i = n-1; i >= 0; i--) invers[i] = (invers[i+1] * (i+1))%mod;