快速幂
问题:求a ^ b %MO。
- b可以用二进制数表示,即b = 2 ^ p1 + 2 ^ p2 + … + 2 ^ pn
- a ^ b = a ^ (2 ^ p1) * a ^ (2 ^ p2) * … * a ^ (2 ^ pn)
- 代码:
for(ans = 1; b; b >>= 1, (a *= a) %= MO)
if (b & 1) (ans *= a) %= MO;
- 时间复杂度:O(log b)
问题:求a ^ b %MO。
for(ans = 1; b; b >>= 1, (a *= a) %= MO)
if (b & 1) (ans *= a) %= MO;