fac[0] = 1;
for(int i = 1; i <= MAX; i++)
fac[i] = (fac[i - 1] * i) % MOD;
inv_fac[MAX] = qpow(fac[MAX], MOD - 2);
for(int i = MAX - 1; i >= 0; i--)
inv_fac[i] = (inv_fac[i + 1] * (i + 1)) % MOD;
fac[0]=fac[1]=1;
for(int i=2;i<=MAXN;i++)fac[i]=fac[i-1]*i%mod;
inv[MAXN]=quipow(fac[MAXN],mod-2);
for(int i=MAXN-1;i>=0;i--)inv[i]=inv[i+1]*(i+1)%mod;
摘抄自https://blog.youkuaiyun.com/Tc_To_Top/article/details/51203160
/*(3) 逆元线性筛 ( P为质数 )
求1,2,...,N关于P的逆元(P为质数)
复杂度:O(N)
代码:*/
const int mod = 1000000009;
const int maxn = 10005;
int inv[maxn];
inv[1] = 1;
for(int i = 2; i < 10000; i++)
inv[i] = inv[mod % i] * (mod - mod / i) % mod;
//如果是求阶乘的逆元呢?(阶乘数组:fac[ ])
//代码:
inv[maxn]=mod_pow(fac[maxn],mod-2);
for(ll i=maxn-1;i>=0;i--)
inv[i]=(inv[i+1]*(i+1))%mod;
摘抄自https://blog.youkuaiyun.com/baidu_35643793/article/details/75268911