带逆元的组合数
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;
}