基本组合数

组合数模板

C n m = C n − 1 m − 1 + C n m − 1 = n ! m ! ∗ ( n − m ) ! C_n^m=C_{n-1}^{m - 1}+C_n^{m - 1}=\frac{n!}{m!*(n-m)!} Cnm=Cn1m1+Cnm1=m!(nm)!n!

#include
#define LL long long
using namespace std;
const int mod=1e9+7;
const int MAXN=200000;
LL fact[MAXN],inv[MAXN],factinv[MAXN];
LL C(LL n,LL m)
{
     
	return fact[n]*factinv[m]%mod*factinv[n-m]%mod;
}
int main()
{
     
	LL n,m;
	fact[0]=inv[0]=factinv[0]=1;
	fact[1]=inv[1]=factinv[1]=1;
	for(int i=2;i<MAXN;i++)
	{
     
		fact[i]=(fact[i-1]%mod*i%mod)%mod;
		inv[i]=(mod-mod/i)*inv[mod%i]%mod;
		factinv[i]=factinv[i-1]*inv[i]%mod;
	} 
	cin>>n>>m;
	cout<<C(n,m)<<endl;
	return 0;
}

你可能感兴趣的:(数论)