zoukankan      html  css  js  c++  java
  • 【数论】Baby Step Giant Step

    被数论怒虐了一天 心力憔悴啊 感觉脑细胞已经快消耗殆尽了>_< 但是今天还是会了很多之前觉得特别神的东西

    比如BSGS 之前听了两遍 好像都因为听得睡着了没听懂-。- 今天终于硬着头皮学会了~ 做个总结吧 免得又忘记- -

    BSGS:

    BSGS就是求 A^x=B(mod C) 0<=x<C的解(C为素数)

    做一个转换 设m*i+j=x (m=trunc(sqrt(C)))

    将A^i(0<=i<m) 存入hash表中(i,A^i)

    这样我们就能O(1)求出A^x=B 对应的x的值

    设AA=(A^m^i)mod C 枚举i的值(0<=i<m)

    原方程就变为 AA*(A^j)=B(mod C)

    因为C为素数 所以(AA,C)=1

    故 可以用拓展欧几里德求出A^j值为多少 再在hash中找A^j对应的j 答案get

    其实不难发现这是个神奇的分块思想 将n分为√n块

    预处理使得计算每块的复杂度降为O(1) 到达加速

    拓展BSGS:

    上题中有一个限制条件 C为素数 如果没有这个条件要怎么做呢

    以下是AC大神的做法 由AK大神跟我讲解(orz两个神犇)

    A^x=B(mod C)

    先将这个方程转换为 A^x+Cy=B

    设 A’=A/(A,C),C'=C/((A,C)^z) (C’与(A,C)^z互质)

    将方程左右都除以(A,C)^z (如果B不能整除(A,C)^z 则无解)

    会得到:

    (A'^z)*A^(x-z)+C'y=B/((A,C)^z)

    这时 将A'^z视为系数 A与C’互质就能用上面的方法求解了

  • 相关阅读:
    「枫桥夜泊」一诗
    走遍亚洲 —— 泰国
    走遍亚洲 —— 泰国
    暴露年龄
    暴露年龄
    插入排序(insertion sort)
    开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
    OpenCV For iOS 1:&#160;连接OpenCV 3.0
    插入排序
    [hadoop系列]Pig的安装和简单演示样例
  • 原文地址:https://www.cnblogs.com/g-word/p/3373184.html
Copyright © 2011-2022 走看看