线性求逆元
https://blog.csdn.net/qq_34564984/article/details/52292502
线性求阶乘逆元
const int mod = 1e9 + 7;
ll fac[maxn];//fac[i]表示i!
ll inv[maxn];//inv[i]表示i!的逆元
ll qk_mod(ll a,ll b,ll mod)
{
ll ans = 1;
while(b){
if(b & 1) ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans;
}
void init()
{
fac[0] = 1;
for(int i = 1;i < maxn;i ++) fac[i] = fac[i - 1] * i % mod;
inv[maxn - 1] = qk_mod(fac[maxn - 1],mod - 2,mod);
for(int i = maxn - 2;i >= 1;i --) inv[i] = inv[i + 1] * (i + 1) % mod;
}