数论学习之组合数

const int N =5000;
const int mod =(int)1e9+7;
int comb[N][N];
void init()//当总数较小时可以用组合数公式求得
{
    for(int i=0;i

当n较大时可以用逆元来算

const int N =5000;
const int mod =(int)1e9+7;
int comb[N][N];
int f[N],finv[N],inv[N];//f中存的是阶乘,finv中存的是逆元的阶乘(分母)
void init()
{
    inv[1]=1;
    for(int i=2;in)return 0;
    return f[n]*1ll*finv[n-m]%mod*finv[m]%mod;
}

你可能感兴趣的:(数学,数论,组合数学)