快速幂

快速幂

要计算(a^b)常规方法要进行b次循环,时间复杂度过高,而快速幂就是将幂运算时间复杂度将缩减到(log_2 b)
(7^9)为例,9的二进制表示为1001,(7^9=7^8*7^1),那么(a^b)就可以表示为(a^i)(0<=i<= b && b的二进制数从右到左第((log_2 i) +1)位为1的累乘。

代码实现,用一个p存取当前用来累乘的值,每循环一次p自乘一次,b不断右移实现判断从右到左第((log_2 i) +1)位是否为1。

无取模

int quickPower(int a,int b)
{
	int ans=1, p=a;
	while(b>0)
        {
	      if(b&1)
	      ans*=p;	
              p*=p;
	      b >>= 1;
	}
	return ans;
}

含取模运算

int quickPower(int a,int b,int m)
{
	int ans=1, p=a;
	while(b>0)
        {
	      if(b&1)
	      {
	            ans*=p;
	            ans%=m;
	      }		
              p*=p;
              p%=m;
	      b>>=1;
	}
        ans%=m;
	return ans;
}
原文地址:https://www.cnblogs.com/qingjielaojiu/p/13523065.html