P3846 [TJOI2007] 可爱的质数/【模板】BSGS
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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步