参考百度百科
快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
原理
以下通过求a^b来介绍
首先把b转换成二进制数,该二进制数第i位的权为 2^(i-1)
例如:13的二进制表示为1101
因此,我们将a^13转化为算a^(2^3)*a^(2^2)*a(2^0)
实现
可以通过位运算来快速实现,通过将b&1来判断b的最小的一位是否为1来做乘法运算
double ans=1.0;
double cur=a;
while(b){
if(b&1)ans*=cur;
cur*=cur; //翻倍,因为a^(2^(i+1))与a^(2^i)是倍数关系
//即a^(2^(i+1))=a^(2^i)*a^(2^i)
b>>1;
}
详细代码如下:
double Power(double base, int exponent) {
double ans = 1.0;
double cur = base;
while (exponent){
if (exponent & 1)ans *= cur;
cur *= cur;
exponent >>= 1;
}
return ans;
}