快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
原理【求a的b次方】
把b转换成二进制数。
该二进制数第i位的权为2^(i-1),即求a^11=a^(2^0+2^1+2^3)
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此我们将a¹¹转化为算:a^(2^0)Xa^(2^1)Xa^(2^3)
实现
//一般实现
int pow(int a,int b){
int r=1,base=a;
while(b!=0){
if(b%2) r*=base;
base*=base;
b/=2;
}
return r;
}
//位运算实现
int pow(int a,int b){
int r=1,base=a;
while(b){
if(b&1) r*=base;//b and 1 也就是取b的二进制最低位(即第0位) 判断b是否为奇数,是则为1
base*=base;
b>>=2;//b shr 1 就是去掉b的二进制最低位(即第0位)
}
return r;
}
欢迎扫描二维码关注微信公众号 深度学习与数学 [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]