BSGS
用途
用途就是求一个最小的\(x\),满足
\(a^{x}\equiv b\pmod p\)
手法就是把\(x\)拆成\(m\)进制数
然后考虑拼凑即可
这个时候预处理\(O(m)\),拼凑\(O(\frac{n}{m})\)
所以时间复杂度就是\(O(\frac{n}{m}+m)\)
\(m=\sqrt{n}\)取最优解,最优时间复杂度为\(O(\sqrt{n})\)
实现
具体操作:
设\(x=i\cdot m-j\)时,原方程成立
则:
\(a^{i\cdot m-j}\equiv b\pmod p\)
移项,得:
\(a^{i\cdot m}\equiv b\cdot a^{j}\pmod p\)
于是直接预处理所有的\(b\cdot a^j\pmod p\)的取值
然后枚举\(i\),如果能查到就可以直接拼凑了