快速幂
给定三个正整数a、b、m(a<109, b<1018,1<m<109),求ab%m。
显然使用简单的循环来写是不行的,这里要使用快速幂的做法。快速幂基于二分法的思想。
- 如果b是奇数,那么有ab=a*ab-1。
- 如果b是偶数,那么有ab=ab/2*ab/2。
这样在log(b)级别的转换后可以将b变成0,即a0=1。
typedef long long LL;
LL binary_pow(LL a, LL b, LL m) {
if (b == 0) return 1;
if (b % 2 == 1) return a * binary_pow(a, b - 1, m) % m;
else {
LL temp = binary_pow(a, b / 2, m);
return temp * temp % m;
}
}