乘法逆元模板

单个数O(logmod)求逆元

$View$ $Code$

const int mod=998244353;
inline long long qpow(long long a,long long b)
{
	long long ans=1;
	while(b)
	{
		if(b&1)
			ans=ans*a%mod;
		a=a*a%mod;
		b/=2;
	}
	return ans%mod;
}
long long calcinv(long long x)
{
	return qpow(x,mod-2);
}

O(n)求1~n的逆元(线性逆元)

$View$ $Code$ ```cpp #include using namespace std; inline int read() { int ret=0,f=1; char ch=getchar(); while('9'

O(n)求1~n的阶乘的逆元(阶乘逆元)

$View$ $Code$

const int mod=998244353;
int maxn;
long long ans,fac[100005],inv[100005];
inline void pre()
{
	fac[1]=1;
	inv[0]=1;
	for(register int i=2;i<=maxn;i++)
	{
		fac[i]=fac[i-1]*i%mod;
	}
	inv[maxn]=qpow(fac[maxn],mod-2,mod);
	for(register int i=maxn;i;i--)
	{
		inv[i-1]=inv[i]*i%mod;
	}
}
原文地址:https://www.cnblogs.com/Peter0701/p/11869760.html