逆元求组合数

Posted rabbit1103

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆元求组合数相关的知识,希望对你有一定的参考价值。

组合数公式

技术分享图片

 

因为取模的性质对除法不适用,这个公式没办法取模

但是可以用逆元把除变成乘

贴个模板

 1 #include <cstdio>
 2 #define ll long long
 3 const ll maxn=1e9+7;
 4 int n,m,K;
 5 ll ans,fac[900005],inv[900005];
 6 ll C(int n,int m)  //  n>=m 
 7 {
 8     return fac[n]*inv[m]%maxn*inv[n-m]%maxn;
 9 }
10 ll ksm(int a,int b)
11 {
12     ll s=1;
13     while (b)
14     {
15         if (b&1) s=s*a%maxn;
16         a=1ll*a*a%maxn;
17         b>>=1;
18     }
19     return s;
20 }
21 int main()
22 {
23     int i,j;
24     scanf("%d%d",&n,&m);
25     for (fac[0]=inv[0]=i=1;i<900005;i++) fac[i]=fac[i-1]*i%maxn;
26     inv[900004]=ksm(fac[900004],maxn-2);
27     for (i=900004;i>=1;i--) inv[i]=inv[i+1]*(i+1)%maxn;
28     printf("%lld
",C(n,m));
29     return 0;
30 }

 

只是放在这边防止自己忘记orz

 

以上是关于逆元求组合数的主要内容,如果未能解决你的问题,请参考以下文章

hdu 3037 费马小定理+逆元求组合数+Lucas定理

知识点:逆元求组合数取模

求组合数

轻院 2180GJJ的日常之沉迷数学 逆元求除法取余

CodeForces - 559C

求逆元的常用方法