快速幂
基本概念:
快速幂就是快速计算底数的n次幂。其时间复杂度为O(log₂N), 与朴素的O(N)相比效率有了极大的高。
介绍与证明:
以下以求a的b次方来介绍:把b转换成二进制数。该二进制数第i位的权为
例如:
11的二进制是1011
11= 23×1 + 22×0 + 21×1 + 20×1
因此,我们将a11转化为算
即可快速求得其幂。
算法实现:
代码:
int fastpow (int a,int b)
{
int r=1,base=a;
while(b)
{
///每次确认其当前位是否有数字,有则乘上当前位。
if(b&1)
r*=base;
///然后将其平方,并将b右移一位。
base*=base;
b>>=1;
}
return r;
}
~step by step