P3846 [TJOI2007] 可爱的质数/【模板】BSGS

gate

\(BSGS(Baby\ Steps\ Giant\ Steps)\)

对于 \(a^x\equiv b\pmod{p}\) ,求\(x_{min}\)

由于模的剩余类会产生循环节,根据鸽巢原理,

\(a^0, a^1, \ldots, a^{n-1}\)\(p\)\(p\)为质数)意义下的剩余类与\(a^n, a^{n+1}, \ldots, a^{2n-1}\)的剩余类相同,

因此我们要的答案一定在\([0, n-1]\)内。

把这\(n\)个数分块, 设\(m=\lceil\sqrt{p}\rceil\)(向上取整)。

\(x=i*m-y\)

\(a^{i*m-y}\equiv b\pmod{p}\)

\(a^{i*m}\equiv b\times a^y\pmod{p}\)$

检查 \(a^y\)是否在出现过,可以用\(map\)或哈希表记录。

首先求出\(a^1,a^2, \ldots, a^m\),并记录\(hash[b\times a^i]=i\)

枚举每个块的端点\(now = now \times a^m\)

若找到了\(hash[now]\),则答案即为\(i*m-hash[now]\)

时间复杂度为\(O(\sqrt p)\)

猜你喜欢

转载自www.cnblogs.com/mogeko/p/13374784.html