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%%%证明
转载需注明出处。