BSGS小结

求解\(a^x≡b(mod\) \(p)\)

对于\(a,p\)互质

我们可以把\(x\)拆成\(A*sqrt(p)-B\),然后转化成:
\(a^{A*sqrt(p)}≡b*a^B(mod\) \(p)\)
因为\(A,B<=sqrt(p)\),所以我们可以暴力枚举\(A,B\),然后用\(hash\)储存判断相同情况即可。

对于\(p\)是质数

\(g\)\(p\)的原根,我们可以把\(a\)转化成\(g^c\),然后变成:
\(g^{a*c}≡b(mod\) \(p)\),然后用上面来解。

对于\(a,p\)不一定互质,\(p\)不是质数

我们要将式子变成\(a^k/D≡b/D(mod\) \(p/D)\),而\(a^k/D\)\(p/D\)互质。
而且,如果\(D\)不能整除\(b\),则无解。
我们可以不断求出\(gcd(a,p/d')\),然后将\(d'*gcd(a,p/d')\),直到\(a\)\(p/D\)互质。
这样的话,\(a^k/D\)便能与\(p/D\)互质。
HZJdalao%%%证明

posted @ 2020-08-03 16:24  jz929  阅读(79)  评论(0编辑  收藏  举报