/* 返回顶部 */

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

gate

\(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)$

posted @ 2020-07-24 22:04  Mogeko  阅读(130)  评论(0)    收藏  举报