zoukankan      html  css  js  c++  java
  • BSGS离散对数(Baby-Step-Giant-Step)

    BSGS离散对数(Baby-Step-Giant-Step)

    题目:

    给定(x,y,p,)求最小的自然数(k)满足(x^k=y(mod p))(ple2^{31})(满足一定有答案)

    题解:

    因为(x^{phi(p)-1}=1pmod{p})

    那么答案最大不会超过(phi(p)-1),因为大于的话直接减掉(phi(p)-1)同样成立

    直接枚举复杂度是(O(p))级别的

    考虑(k)可以表示成(asqrt p +b)的形式,那么我们考虑要怎么求(a,b)

    (a,b)满足要求,既(x^{asqrt p } imes x^{b}=y pmod{p})

    (x^{asqrt p}=y imes x^{-b} pmod{p})

    那么,如果我们对于每个(x^{asqrt p})都可以(O(1))判断,那么整个算法的复杂度就可以降到(O(sqrt p))

    对于(1)(sqrt p)我们直接处理,将其(x^{-b} imes ypmod{p})插入哈希表(因为p太大了所以不能直接用数组)。

    那么对于每个(x^{asqrt{p}})即可在哈希表中查找。

    那么复杂度就是(O(sqrt{p} imes 哈希表常数))

    即可解决问题(√)

    核心思想:

    暴力出奇迹,转成根号级别的暴力,复杂度就对了。

    众星因你,皆降为尘。
  • 相关阅读:
    AssetBundleNote
    UNet笔记
    HololensAR开发设置
    Hololens真机使用Unity开发流程
    数据结构笔记
    解决粘包问题
    使用C#中的Socket进行通讯
    解决Sql注入,防止恶意数据
    110. 平衡二叉树
    104.二叉树的最大深度
  • 原文地址:https://www.cnblogs.com/Star-dust/p/8146270.html
Copyright © 2011-2022 走看看