【模板】快速幂
思想
\[a^{b}=\begin{cases}a^{\frac {b}{2}}\times a^{\frac {b}{2}}\qquad a\mod b==0\\ a^{\frac {b}{2}}\times a^{\frac {b}{2}}\times a\qquad a\mod b==1\end{cases}
\]
为了防止溢出,通常会进行取模操作(下文n
即是模数)。
时间复杂度
\[O(\log n)
\]
代码(递归、非递归)
typedef long long ll;
ll quickpow(ll a,ll b,ll n){
if(b==1) return a;
if(b%2==0){
ll t=quickpow(a,b/2,n);
return t*t%n;
}
else{
ll t=quickpow(a,b/2,n);
t=t*t%n;
t=t*a%n;
return t;
}
}
int quickpow(int a,int b,int n){
int ret=1;
while (b)
{
if(b%2==1) ret = ret*a%n;
a=a*a%n;
b>>=1;
}
return ret;
}