求组合数
求组合数
1,就是杨辉三角
//组合数打表模板,适用于N<=3000 //c[i][j]表示从i个中选j个的选法。 long long C[N][N]; void get_C(int maxn) { C[0][0] = 1; for(int i=1;i<=maxn;i++) { C[i][0] = 1; for(int j=1;j<=i;j++) C[i][j] = C[i-1][j]+C[i-1][j-1]; //C[i][j] = (C[i-1][j]+C[i-1][j-1])%MOD; } }
2.当数比较大的时侯,并且取模的时候
ll fact[maxn],infact[maxn]; ll qpow(ll a,ll b){ ll ans=1; while(b){ if(b&1){ ans=(ans*a)%mod; } a=(a*a)%mod; b/=2; } return ans%mod; } void inint(){ fact[0]=infact[0]=1; for(int i=1;i<maxn;i++){ fact[i]=(fact[i-1]*i)%mod; infact[i]=(infact[i-1]*qpow(i,mod-2))%mod; } } ll c(int a,int b){ return (ll)((fact[a]*infact[b])%mod*infact[a-b])%mod; }