P3846 [TJOI2007] 可爱的质数/【模板】BSGS
\(BSGS(Baby\ Steps\ Giant\ Steps)\)
对于 \(a^x\equiv b\pmod{p}\) ,求$x_$
由于模的剩余类会产生循环节,根据鸽巢原理,
$a0, a1, \ldots, a^$模$p$($p$为质数)意义下的剩余类与$an, a{n+1}, \ldots, a^{2n-1}$的剩余类相同,
因此我们要的答案一定在$[0, n-1]$内。
把这$n$个数分块, 设$m=\lceil\sqrt\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$或哈希表记录。
首先求出$a1,a2, \ldots, am$,并记录$hash[b\times ai]=i$
枚举每个块的端点$now = now \times a^m$
若找到了$hash[now]$,则答案即为$i*m-hash[now]$。
时间复杂度为$O(\sqrt p)$

浙公网安备 33010602011771号