快速幂
定义
求 \(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;
}

浙公网安备 33010602011771号