快速幂
我们知道 \(x^{2y}=x^{2^y}\),快速幂就是运用的这个性质求 \(x^y\)。
具体的:
- 当 \(y\%2=1\) 时,\(ans=ans\times x,y=y-1\)
- \(y\%2=0\),\(x=x*x,y=y\div2\)
正确性证明
注意到最后 \(y\) 一定会变为 \(1\),也就是 \(ans\) 一定会至少改变一次,而这种情况就是 \(y=2^n\) 时才会发生的。
而当 \(y\) 为奇数时,\(x^y=x^{2^\frac{y-1}{2}}\times x\),而这个等式前面一大坨就是上面的情况,后面已经处理了。
最后很明显时间复杂度 \(O(logn)\)
点击查看代码
while(y){
if(y&1){
ans *= x;
ans %= m;
}
x *= x;
x %= m;
y >>= 1;
}

浙公网安备 33010602011771号