Appearance
类似BSGSBSGSBSGS算法
假设需要很多次vx(mod p)v^x (\mod p)vx(modp)的结果
可以预处理出v0,v1,...,vs,v2s,vts(ts<p)v^0,v^1,...,v^s,v^{2s},v^{ts(ts \lt p)}v0,v1,...,vs,v2s,vts(ts<p)
那么x=as+bx=as+bx=as+b就可以求出来
复杂度O(p)−O(1)O(\sqrt p)-O(1)O(p)−O(1)
以上方法适用于底数不变的情况
否则的话,找到ppp的原根(比如:1e9+71e9+71e9+7的原根是555,998244353998244353998244353的原根是333)
预处理每个需要算的值gx≡v(mod p)g^x \equiv v(\mod p)gx≡v(modp)的xxx
那么假设需要算vbv^bvb就是算gxbg^{xb}gxb,转化为同底数