Loading [MathJax]/extensions/TeX/mathchoice.js
/* 返回顶部 */

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}pp为质数)意义下的剩余类与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)

posted @   Mogeko  阅读(120)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示