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


    gate

    (BSGS(Baby Steps Giant Steps))

    对于 (a^xequiv bpmod{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=lceilsqrt{p} ceil)(向上取整)。

    (x=i*m-y)

    (a^{i*m-y}equiv bpmod{p})

    (a^{i*m}equiv b imes a^ypmod{p})$

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

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

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

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

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

  • 相关阅读:
    vue 定义全局函数和变量
    大学感受
    NOIP2018 游记
    NOI2018 游记
    THUSC 2018 游记
    APIO2018 游记
    SXOI2018游记
    poorpool 的 考场 NOI Linux 配置
    关于 poorpool
    NOIP2017 游记
  • 原文地址:https://www.cnblogs.com/mogeko/p/13374784.html
Copyright © 2020-2023  润新知