快速幂的迭代写法:
typedef long long ll;
ll pow_mod(ll a,ll b,ll m){
ll ans=1;
while(b){
if(b&1) ans=ans*a%m;
a=a*a%m;
b>>=1;
}
return ans;
}
注意:快速幂模板输出结果还要对m取余,否则数据可能不会完全通过!
当m挺大时,
ll fast_mul(ll a, ll b, ll m) {
ll ans = 0;
while (b) {
if (b & 1) {
ans = (ans + a) % m;
}
a = (a + a) % m;
b >>= 1;
}
return ans;
}
ll fast_pow(ll a, ll b, ll m) {
ll ans = 1;
while (b) {
if (b & 1) {
ans = fast_mul(ans, a, m);
}
a = fast_mul(a, a, m);
b >>= 1;
}
return ans;
}