快速幂:
就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
原理:
假设我们要求211,因为11=(1011)2= 2º×1 + 2¹×1 + 2²×0 + 2³×1 = 1+2+8
可转化为:211 =22^0 × 22^1 × 22^3 = 21 × 22 × 28
由原来的计算11次变成了计算3次
实现:(推荐第三种)
常规求幂:
int pow1(int x,int y){
int r=1;
while(y--) {
r*=x;
}
return r;
}
快速求幂(一般):
int pow2(int x,int y){
int r=1,base=x;
while(y!=0){
if(b%2) {
r*=base;
}
base*=base;
y/=2;
}
return r;
}
快速求幂(位运算):
int poww(int a, int b) {
int ans = 1, base = a;
while (b != 0) {
if (b & 1 != 0){
ans *= base;
}
base *= base;
b >>= 1;
}
return ans;
}
最后一个看不懂的话就举个例子自己模拟一下~
参考自:https://www.cnblogs.com/CXCXCXC/p/4641812.html 以及百度百科