(新)乘法逆元+组合数求解

逆元:

四种求解方式

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 不要忘记 }
//也可直接这么线性推出

 

posted on 2022-07-20 08:01  HZOI-曹蓉  阅读(27)  评论(0编辑  收藏  举报