BSGS

BSGS(大步小步法)

  • BSGS 可以在 \(O(\sqrt{p})\) 的时间内求解满足 \(a^x\equiv b\pmod p\)\(x\),其中 \(a\perp p,x>0\)

  • 实现原理:

    • 尝试进行和整除分块异曲同工的变换。\(a^x\equiv b\Leftrightarrow a^{k\times sq-r}\equiv b\Leftrightarrow a^{k\times sq}\equiv b\times a^r\)

    • 其中 \(sq=\lceil\sqrt p\rceil\)

    • 其实直接写成 \(k\times sq+r\) 的形式也可以,但是要求逆元比较烦,所以换成减的。当然,也可以先写成那样然后微调一下。

    • 容易证明,有 \(0\leqslant k<sq,0\leqslant r<sq\)。注意前者的证明其实是靠扩展欧拉定理。更严谨的表述是,\(\exists x\to \exists k\in (0,sq)\)

    • 从而我们可以枚举 \(r\) 算出所有可行取值,然后再枚举 \(k\) 来验证成立。注意对于同一个式右的值,如果求最小 \(x\),那么我们希望 \(r\) 尽量大。

  • 复杂度保证:求 \(a\)\(sq\) 次方,枚举 \(A,B\) 都是 \(O(sq)\) 的,故总复杂度为 \(O(\sqrt{p})\)

扩展 BSGS

  • 扩展 BSGS 可以在 \(O(\sqrt{p})\) 的时间内求解满足 \(a^x\equiv b\pmod p\)\(x\),不保证 \(a\perp p\)

  • 实现原理:

    • 将同余式展开为不定方程,得 \(a^x+k\times p=b\)

    • 由裴蜀定理,当且仅当 \(\gcd(a,p)\mid b\),有解。

    • 从而上式可以化为 \(\dfrac{a^x}{g}+k\times\dfrac{p}{g}=\dfrac{b}{g}\)

    • 反复,直到 \(a\perp p'\)。然后 BSGS,注意此时的 \(x'\) 已经不是原来的 \(x\)\(b\) 也应当把式左的系数除过去。

  • 复杂度保证:\(\gcd\geqslant 2\),从而扩展阶段的复杂度为 \(\log\) 级别,故总复杂度仍为 \(O(\sqrt{p})\)

posted @ 2023-01-15 10:37  未欣  阅读(34)  评论(0编辑  收藏  举报