Skip to content

光速幂 ​

类似BSGSBSGS算法

假设需要很多次vx(mod  p)v^x (\mod p)的结果

可以预处理出v0,v1,...,vs,v2s,vts(ts<p)v^0,v^1,...,v^s,v^{2s},v^{ts(ts \lt p)}

那么x=as+bx=as+b就可以求出来

复杂度O(p)−O(1)O(\sqrt p)-O(1)

以上方法适用于底数不变的情况

否则的话,找到pp的原根(比如:1e9+71e9+7的原根是55,998244353998244353的原根是33)

预处理每个需要算的值gx≡v(mod  p)g^x \equiv v(\mod p)的xx

那么假设需要算vbv^b就是算gxbg^{xb},转化为同底数