快速幂

我们知道 \(x^{2y}=x^{2^y}\),快速幂就是运用的这个性质求 \(x^y\)
具体的:

  1. \(y\%2=1\) 时,\(ans=ans\times x,y=y-1\)
  2. \(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;
}
posted @ 2025-09-21 19:32  虚空远行者  阅读(6)  评论(0)    收藏  举报