线性求逆元 板子

#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;

猜你喜欢

转载自blog.csdn.net/qq_41955236/article/details/81665334