计算 a^b % m:
- 递归算法
typedef long long LL;
LL binaryPow(LL a, LL b, LL m) {
if (b == 0) return 1;
if (b % 2 == 1) return a * binaryPow(a, b - 1, m) % m;
else {
LL t = binary(a, b / 2, m);
return t * t;
}
}
- 迭代写法
typedef long long LL;
LL binaryPow(LL a, LL b, LL m) {
LL ans = 1;
while (b > 0) {
if (b & 1 ) {
ans = ans * a % m;
}
a = a * a % m;
b >>= 1;
}
return ans;
}