#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=100005;
const int mod=(int)1e9+7;
ll inv[maxn],a[maxn],n;
int main(){
inv[1]=1;
for(int i=2;i<maxn;i++){
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
}
return 0;
}
也可以递归求 复杂度为logn
ll inv(ll n){
if(n==1)
return 1;
return (mod-mod/n)*(inv(mod%n))%mod;
}
再加上一个阶乘的线性求逆元板子
fac[0]=fac[1]=1;
for(ll i=2;i<maxn;i++)
fac[i]=fac[i-1]*i%mod;
inv_fac[maxn-1]=quick(fac[maxn-1],mod-2);
for(int i=maxn-2;i>=0;i--)
inv_fac[i]=inv_fac[i+1]*(i+1)%mod;