逆元定义:a和p互质时有 a * x = 1 (mod p) 则x称为a关于p的逆元
求余数时会有下面这些情况:
(a + b) % p = (a%p + b%p) %p (对)
(a - b) % p = (a%p - b%p) %p (对)
(a * b) % p = (a%p * b%p) %p (对)
(a / b) % p = (a%p / b%p) %p (错)
所以在求除法的时候就需要用到逆元了
对于任意数q逆元用inv(q) 表示
那么(a / b) % p = (a * inv(b) ) % p = (a % p * inv(b) % p) % p
这样问题可解~
逆元求法
方法一: 费马小定理
p为质数,a, p互质有
a^(p-1) ≡1 (mod p)
两边同除以a得到
a^(p-2) ≡ inv(a) (mod p)
所以inv(a) = a^(p-2) (mod p)
这个用快速幂去求,复杂度O(logn):
LL pow_mod(LL a, LL b, LL p){//a的b次方求余p
LL ret = 1;
while(b){
if(b & 1) ret = (ret * a) % p;
a = (a * a) % p;
b >>= 1;
}
return ret;
}
LL Fermat(