求组合数

求组合数

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;    
}

 

posted @ 2021-06-20 00:23  lipu123  阅读(45)  评论(0)    收藏  举报