BSGS(大步小步)算法学习笔记
BSGS(大步小步)算法学习笔记
前置芝士
会取模运算就行啦!
正文部分
拔山盖世 $\tt{BSGS}$ 算法用于求解 $a^x \equiv b \pmod{p}, \ a \perp p$ 中 $x$ 的值。
设 $x = ti - j$,$t = \left \lceil \sqrt{p} \right \rceil$,$1 \le i \le t$,$0 \le j < t$。
然后简单化一下:
因为 $ba^j$ 只有 $t$ 个取值,可以先枚举 $j$ ,求出所有的 $ba^j$ 并使用 $\tt{Hash}$ 或 $\tt{map}$ 存储,然后枚举 $i$,求出 $a^{ti}$,查找是否有与之相等的 $ba^j$ ,若有则 $ti-j$ 即为合法的 $x$ 值。不算 $\tt{Hash}$ 或 $\tt{map}$ 的化,复杂度 $\Theta(\sqrt{p})$。
CODE
1 |
|
exBSGS
使用 $\tt{BSGS}$ 有一个限制条件,即 $a \perp p$,$\tt{exBSGS}$ 就是为了解决这个问题。
考虑 $a$、$p$ 不互质时怎么做,设 $g = \gcd(a,p)$,$a = a’g$,$p=p’g$,易得 :
得到有解的条件:$g \mid b$。 然后继续瞎搞一波:
每次使 $b = \dfrac{b}{g} \times a’^{-1} $,$p = p’$,缩小问题范围,一直做到 $a$,$p$ 互质即可 $\tt{BSGS}$ 求解。注意 $a$ 的指数变为 $x-1$。
CODE
1 |
|
参考:OI Wiki,https://mancityfc.blog.luogu.org/solution-p3846,cqh’s blog 。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!