快速幂的原理可以用以下的例子理解
5^14=5^(2^1+2^1+2^1+2^0)
而14的二进制为1110,实际上a^b=a^(2^i+2^j+2^k+……)其中ijk…为b的二进制。知道了这个原理就可以写出快速求幂的算法了。结合位运算,b&1可以取b的二进制最后一位,判断并运算后b>>1继续判断并运算,循环直至b=0即可。
代码如下:
int pow(int a, int b){ int base=a; int num=1; while(b!=0){ if(b&1!=0) num*=base; base*=base; b>>=1; } return num; }
算法的时间复杂度为O(log2n)