快速幂

快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。

位运算版

ll qpow(ll a,ll n)
{
	ll ans=1;
	while(n)
	{
		if(n&1)
			ans=ans%mod*a%mod;
		a=a%mod*a%mod;
		n>>=1;
	}
	return ans;
}

ll inv(ll a,ll p)
{
	return qpow(a,p-2);
}

递归版

ll qpow(ll a,ll n)
{
    if(n==1) return a;
    ll temp=qpow(a,n/2);
    return (n%2==0 ? 1:a)*temp*temp;
}

ll inv(ll a,ll p)
{
	return qpow(a,p-2);
}