【模板】快速幂

思想

\[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;
}
posted @ 2020-02-25 18:33  FirwoodLin  阅读(159)  评论(0编辑  收藏  举报