带模除法转为乘法(乘法逆元)
如果a*b 与 1 同模p, 那么我们就说b是a模p的乘法逆元
如下图,因为是mod p , 所以乘以ab,相当于乘以1
那么如果求乘法逆元呢, 如果p是素数, 那么根据费马小定理, 即
所以a模p的乘法逆元是a^(p-2)
如果p不是素数, 那么可以用扩展欧几里得求出。
下面是组合数取模使用到乘法逆元
1 LL MyPow(LL a, LL b) 2 { 3 LL ret = 1; 4 while (b) 5 { 6 if (b & 1) 7 ret = ret * a % MOD; 8 a = a * a % MOD; 9 b >>= 1; 10 } 11 return ret; 12 } 13 LL C(int n, int m) 14 { 15 if (m > n || m < 0) return 0; 16 LL a = fact[n], b = fact[n - m] * fact[m] % MOD; 17 return a * MyPow(b, MOD - 2) % MOD;//除以一个数,等于乘以这个数的乘法逆元, 然后是在MOD的情况下 18 }