【学习笔记】BSGS & exBSGS
BSGS
O(√p) 求解关于 x 的高次同余方程 ax≡n(modp),其中 p 为质数。
由 aϕ(p)≡1(modp) 得 x∈[0,p−1)。设 $x = i k - j,则(a^k)^i \equiv b a^j \pmod{p},取k = \sqrt{p},对于j \in [0, k)把b * a^j \pmod{p}存入hash表,枚举i \in [0, k),查找hash表中是否有当前的(a^k)^i \pmod{p}$。
exBSGS
p 非质的版本,(a,p)>1。考虑转化为 (a,p)=1。
展开为 a⋅ax−1+p∗y=b,必须要 (a,p)∣b,ax−1 和 y 才有整数解。
令上柿变为:ax−1⋅a(a,p)≡b(a,p)(modp(a,p))。
此时如果 (ax−1,p(a,p))=1,就直接用 BSGS 解 ax−1≡b(a,p)a(a,p)(modp(a,p))(注意这里的模数可能非质,不能用费马小定理求逆元,只能 exgcd 啦);否则递归分解直到 (a′,p′)=1。
在递归过程中若出现 (a′,p′)∤b(a,p)a(a,p),直接无解。注意:有特例:若 b(a,p)a(a,p)≡1(modp(a,p)),表示 ax−k≡1(modp)(递归了 k 层),即 $a^{x - k} a^k \equiv 1 b \pmod{p},k$ 为解。
template
1 | // luogu_4195 |