zoukankan      html  css  js  c++  java
  • BSGS_Baby steps giant steps算法

    BSGS这个主要是用来解决这个题:

    A^x=B(mod C)(C是质数),都是整数,已知A、B、C求x。

    在具体的题目中,C一般是所有可能事件的总数。

    解:

    m = ceil(sqrt(C))(ceil为上取整), x = i * m + j

    那么A^x = (A^m)^i * A^j, (0 <= i < m, 0 <= j < m)

    然后可以枚举iO(sqrt(C))级别的枚举。

    对于一个枚举出来的i,令D = (A^m)^i现在问题转化为求D * A^j ≡ B (mod C)

    如果把A^j当作一个整体,那么套上exgcd就可以解出来了(而且因为C是质数,A是C的倍数的情况容易特判,除此之外必有

    (D, C) = 1,所以一定有解):exgcd求逆元,可以参考:http://www.cnblogs.com/PJQOOO/p/3873654.html

    求出了A^j,现在的问题就是我怎么知道j是多少?

    先用O(sqrt(C))的时间,将A^j全部存进hash表里面。然后只要查表就在O(1)的时间内知道j是多少了。

  • 相关阅读:
    机器视觉
    视觉感知
    计算机视觉
    模板匹配
    Kinect
    手势识别
    三维重建
    单元化理解
    [面试经] Java
    [面试经]Java中final、finally、finalize有什么不同?
  • 原文地址:https://www.cnblogs.com/PJQOOO/p/4656369.html
Copyright © 2011-2022 走看看