带逆元的组合数

long long ksm(long long X){
    long long sum=1;
    int N=mod-2;
    while(N){
        if(N&1)
            sum=sum*X%mod;
        X=X*X%mod;
        N/=2;
    }
    return sum;
}

这就是快速幂的板子,因为要求逆元

void init(){
    fact[0]=1;
    infact[0]=1;
    for(int i=1;i<=n;i++){
        fact[i]=fact[i-1]*i%mod;
        infact[i]=infact[i-1]*ksm(i)%mod;
    }
}

这个相当于预处理一下,求组合数阶乘会被多次使用,重复乘除是没有意义的

int c(int x,int y){

    if(x==0||y==0||x<y)
        return 0;
    return fact[x]*infact[y]%mod*infact[x-y]%mod;
}
posted @ 2023-08-03 18:58  zyzzzzlh  阅读(15)  评论(0)    收藏  举报