组合数
作者:互联网
1 #include <iostream> 2 3 using namespace std; 4 5 typedef long long LL; 6 const int MAXN=200010; 7 const int MOD=(int)1e9+7; 8 int F[MAXN],Finv[MAXN],inv[MAXN]; //F是阶乘,Finv是逆元的阶乘 9 10 void init() 11 { 12 inv[1]=1; 13 for (int i=2;i<MAXN;i++) inv[i]=(MOD-MOD/i)*(LL)1*inv[MOD%i]%MOD; 14 F[0]=Finv[0]=1; 15 for (int i=1;i<MAXN;i++) 16 { 17 F[i]=F[i-1]*(LL)1*i%MOD; 18 Finv[i]=Finv[i-1]*(LL)1*inv[i]%MOD; 19 } 20 return; 21 } 22 int comb(int n,int m) //comb(n, m)就是C(n, m) 23 { 24 if (m<0 || m>n) return 0; 25 return F[n]*(LL)1*Finv[n-m]%MOD*Finv[m]%MOD; 26 } 27 int main() 28 { 29 init(); 30 return 0; 31 }
标签:return,组合,int,Finv,MAXN,阶乘,MOD 来源: https://www.cnblogs.com/hell0er/p/15643485.html