1. 程式人生 > >【模板】快速冪/快速乘

【模板】快速冪/快速乘

快速冪:

inline int ksm(int a,int b,int mod)
{
	int ans=1;
	a%=mod;
	while(b)
	{
	  if(b&1) ans=ksc(ans,a,mod);
	  b>>=1;
	  a=ksc(a,a,mod);
	}
	return ans;
}

快速乘(O(logN)):

inline int ksc(int a,int b,int mod)
{
	int ans=0;
	a%=mod;
	while(b)
	{
	  if(b&1) ans=(ans+a)%mod;
	  b>>=1;
	  a=(a+a)%mod;
	}
	return ans;
}

快速乘(O(1)):

inline int mul(int a,int b)
{
    return (a*b-(int)((long double)a/mod*b)*mod+mod)%mod;
}