快速幂
将幂指数拆分成二的幂次相加的形式,从而各各相邻幂次之间存在平方关系,再累加得出结果
关键代码
//快速幂 O(logN)
//求a的b次幂
//将b拆成2的幂相乘,每个2的幂之间有乘积关系
long long FastPower(int a, int b) {
long long base = a; //b二进制位对应的幂值
long long solve = 1; //累计结果值
while (b != 0) { //由于不断右移最后b会为0
if (b & 1) { //判断最右端二进制位是否为1
solve *= base; //累计
}
base *= base; //a^1->a^2->a^4->a^8......
b = b >> 1; //右移一位
}
return solve;
}
int main() {
long long p = FastPower(3, 10);
cout << p;
return 0;
}