BSGS 算法也称为大小步算法,主要用来解决
\begin{array}{c} A^x \equiv B \mod{p} \end{array}
的问题,其中 p 为质数。
令 x = i \cdot m -j,其中 m = \lceil \sqrt{p} \,\rceil。此时原式等价于
\begin{array}{c} A^{i \cdot m - j} \equiv B \mod{p} \\ \Rightarrow A^{i \cdot m} \equiv A^{j} \cdot B \mod{p} \end{array}
然后枚举 j \in [0,m],将A^{j} \cdot B 存入哈希表;再枚举 i \in [1,m],从哈希表中寻找第一个满足 pA^{i \cdot m} \equiv A^{j} \cdot B \mod{p}的 i,则此时
\begin{array}{c} x = i \cdot m -j \end{array}
即为所求解。该算法复杂度为 O(\sqrt{p} \,)。