(新)乘法逆元+组合数求解
逆元:
四种求解方式
https://www.cnblogs.com/kuangbiaopilihu/p/12921745.html#43-%E5%A6%82%E4%BD%95%E6%B1%82%E4%B9%98%E6%B3%95%E9%80%86%E5%85%83
组合数:
1.递推求解
2.线性求解
void init() { fac[0]=ny[0]=1; for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod; ny[n]=qpow(fac[n],mod-2,mod); for(int i=n-1;i>=1;i--)ny[i]=ny[i+1]*(i+1)%mod;
//阶乘逆元的线性求法,求出一个,剩下的递推就行 } int C(int n,int m) {return fac[n]*ny[m]%mod*ny[n-m]%mod;}
// 因为 1<i<p,所以 p/i 一定小于 p ny[1] = 1; for (int i = 2; i < p; ++i)
{ ny[i] = (long long)(p - p / i) * ny[p % i] % p; // 注意最后的模 p 不要忘记 }
//也可直接这么线性推出