- 编程
光速幂
- @ 2026-1-30 11:19:43
光速幂是一种 预处理, 查询求 的算法
先与处理出 和 $2^{\sqrt{n}}, 2^{2*\sqrt{n}}, 2^{3*\sqrt{n}}, ……, 2^{(n-1)*\sqrt{n}}, 2^{n}$
再用上面这两组搭配相乘,形如
其中 为 , 为 ,且
void init_quick_pow() {
siz = sqrt(n) + 1; // sqrt有常数,要先记录下来
pow1[0] = pow2[0] = 1;
for (int i = 1; i <= siz; i++)
pow1[i] = pow1[i - 1] * 2 % mod;
for (int i = 1; i <= siz; i++)
pow2[i] = pow2[i - 1] * pow1[siz] % mod;
}
int query(int k) { return pow1[k % siz] * pow2[k / siz] % mod; }