#define ll long long
const int maxn=1e5;
const int mod=1e9+7;
ll fac[maxn];
ll inv[maxn];
void inv_ini()
{
fac[0]=1;
for(int i=1; i<maxn; i++)
{
fac[i]=fac[i-1]*i%mod;
}
inv[maxn-1]=qpow(fac[maxn-1],mod-2,mod);
for(int i=maxn-2; i>=0; i--)
{
inv[i]=inv[i+1]*(i+1)%mod;
}
}
次数多,范围小,空间少
// 预处理On,查询O1
ll fac[maxn]={1,1},inv[maxn]={1,1},f[maxn]={1,1};
ll c(ll a,ll b){//c(1,2),c(4,8)
return fac[b]*inv[a]%mod*inv[b-a]%mod;
}
void init(){
for(int i=2;i<maxn;i++){
fac[i]=fac[i-1]*i%mod;
f[i]=(mod-mod/i)*f[mod%i]%mod;
inv[i]=inv[i-1]*f[i]%mod;
}
}
次数少,代码少
// 查询On
ll c(ll m,ll n){//c(1,2),c(3,4)
ll ret=1;
for(int i=1;i<=m;i++)ret=ret*(n-i+1)%mod*qpow(i,mod-2)%mod;
return ret;
}