组合数模板

暴力法

int C(int a,int b){
    int res=1;
    for(int i=a,j=1;j<=b;i--,j++){
        res=res*i/j;
        if(res>n) return res;
    }
    return res;
}

优化

const int N=1e5+5;
const int Mod=1e9+7;
int f[N],inf[N];

int qpow(int a,int b){
    int res=1;
    while(b){
        if(b&1) res=res*a%Mod;
        b>>=1;
        a=a*a%Mod;
    }
    return res;
}

void init(int x){//求逆元
    f[0]=inf[0]=1;
    for(int i=1;i<x;i++){
        f[i]=f[i-1]*i%Mod;
        inf[i]=inf[i-1]*qpow(i,Mod-2)%Mod;
    }
}

int C(int a,int b){//组合数
    return f[a]*inf[a-b]%Mod*inf[b]%Mod;
}

posted on 2025-04-08 20:10  TaopiTTT  阅读(15)  评论(0)    收藏  举报