这题主要就是数中分离连通块的操作 相当于切边 其次就是逆元打表啦,重要公式:
inv[i]=((mod-mod/i)*inv[mod%i])%mod;
- C与A
ll C(ll x,ll y){
return f[x]*inv[x-y]%mod*inv[y]%mod;
}
ll A(ll x,ll y){
return f[x]*inv[x-y]%mod;
}
- 标准的逆元打表与逆元阶乘打表
f[0]=inv[0]=f[1]=inv[1]=1;
for(int i=2;i<=305;i++){
inv[i]=((mod-mod/i)*inv[mod%i])%mod;
f[i]=i;
}
for(int i=2;i<=305;i++){
inv[i]=inv[i-1]*inv[i]%mod;
f[i]=f[i-1]*f[i]%mod;
}
- 阶乘逆元打表 方法2:倒推,先由费马小定理求出inv[N!],倒推出所有inv【】 先求出阶乘,再求出n!的逆元,倒推出 i! 的逆元 (n要小于mod否则fac为0)
inv[i]=(1LLinv[i+1](i+1))%mod;
fac[0]=1; inv[0]=1;
for(int i=1;i<=n;i++)
fac[i]=(1LL*fac[i-1]*i)%mod;
inv[n]=modpow(fac[n],mod-2);
for(int i=n-1;i>=1;i--)
inv[i]=(1LL*inv[i+1]*(i+1))%mod;