扩展 BSGS 学习笔记
在 离散对数 & BSGS 学习笔记 中,我们学习了 BSGS 。
设有 \(a,b,m\in\mathbf{N^*}\) ,且 \((a,m)\ne1\) ,求解:
\[a^x\equiv b\pmod m
\]
这玩意咋求解?把它变成 BSGS 能做的形式不就行了!
首先对于 \(a\equiv b\equiv0\) ,可以直接得到 \(x=1\) 。
或者当 \(b\equiv1\) 时,得到 \(x=0\) 。
否则,原方程可以写为
\[a^x+km=b
\]
设 \(d=(a,m)\) ,则根据裴蜀定理,这个方程有解的必要条件为 \(d|b\) 。所以,当 \(d\not|b\) 时可以直接判断为无解。
否则,原方程可以化为
\[\dfrac{a}{d}\cdot a^{x-1}\equiv\dfrac{b}{d}\pmod{\dfrac{m}{d}}
\]
继续设 \(d'=(a,\dfrac{m}{d})\) ,若 \(d'|\dfrac{b}{d}\) ,则原方程可以化为
\[\dfrac{a}{dd'}\cdot a^{x-2}\equiv\dfrac{b}{dd'}\pmod{\dfrac{m}{dd'}}
\]
设 \(D=\prod d\) ,则以此类推直到 \(a\perp\dfrac{m}{D}\) ,则原方程转化为
\[\dfrac{a^k}{D}\cdot a^{x-k}\equiv\dfrac{b}{D}\pmod{\dfrac{m}{D}}
\]
其中 \(k\) 为 \(d\) 的个数。
这样就可以用 BSGS 求 \(x-k\) 的值了。
题目
题单: https://vjudge.net/article/5400
洛谷 P4195 【模板】扩展 BSGS/exBSGS
模板。