快速幂
暴力求幂是的,快速幂相当于是二分进行计算。
- 递归版:
long long binpow(long long a, long long b) {
if (b == 0) return 1;
long long res = binpow(a, b / 2);
if (b % 2)
return res * res * a;
else
return res * res;
}
- 迭代版:将b的二进制位为1的位对应的幂相乘。某位对应的幂就是前一位对应的幂的平方。
long long binpow(long long a, long long b) {
long long res = 1;
while (b > 0) {
if (b & 1) res = res * a;
a = a * a;
b >>= 1;
}
return res;
}