普通的幂运算是将底数乘以底数指数次,需要**O(n)**的时间复杂度。

通过将an次幂不断转换为a2n/2次幂,可以将时间复杂度缩减至O(logn)

1
2
3
4
5
6
7
8
9
10
11
12
typedef long long ll;

int fastpow(int base, int exp){
int sum = 1;
while(exp > 0){
if((exp & 1))//如果指数为奇数,将结果乘以底数
sum *= base;
exp = exp >> 1;//指数除以2
base *= base;//底数平方
}
return sum;
}