快速幂

定义

\(x\)\(y\) 次方是多少,即求 \(x^y\), \(y\) 过大时,在模意义下可以采用快速幂,本质是分治.分治法通过不断地将指数 \(y\) 折半,减少计算量,从而高效地计算出 \(\color{blue}x^y\).

\(k=y\mod 2\),此时 \(\color{blue}x^y\) 有这样的性质:

\[\large x^y= \begin{cases} x^{\frac{y}{2}}\times x^{\frac{y}{2}}&for&\text{k=0}\\ x^{\lfloor \frac{y}{2} \rfloor}\times x^{\lfloor \frac{y}{2} \rfloor}\times x &for&\text{k=1} \end{cases}\]

代码

int mi(ll x, ll y, ll mod) {
    ll res = 1;
    while (y) {
        if (y & 1)
            res = res * x % mod;
        x = x * x % mod;
        y >>= 1;
    }
    return res;
}

简化

int mi(int x,int y,int mod){
	int t=1;
	for(;y;y>>=1,x=(long long)x*x%mod)if(y&1)t=(long long)t*x%mod;
	return t;
}
posted @ 2025-08-20 20:54  badn  阅读(6)  评论(0)    收藏  举报