求a^b
原理:把 b 看成二进制数,采用倍增的思想;
比如:十进制的11=二进制的1011
a^11=a^(1011)=a^(1*2^3 + 0*2^2 + 1*2^1 + 1*2^0)
代码:
int power(int a,int b)
{
int ans=1;
while(b>0)
{
if(b&1)ans*=a;
a*=a,b>>=1;
}
return ans;
}
如果是求 a^b%c 的话,即快速幂模:
int power(int a,int b,int c)
{
int ans=1;
while(b>0)
{
if(b&1)ans*=a,ans%=c;
a*=a,a%=c,b>>=1;
}
return ans;
}