zoukankan      html  css  js  c++  java
  • BSGS与二次剩余

    BSGS

      $Big Step Giant Step$,大步小步法,一种在$O(sqrt{p})$内求解方程$a^xequiv b (mod p)$的算法。

      先考虑$p$为质数的情况。

      令$x=im-j$,$m=lceil sqrt{p} ceil$(注意是上取整,要保证大步比小步大),则$a^{im-j}equiv b(mod p)$。

      移项,有$(a^m)^iequiv ba^j(mod p)$。

      首先$0-i$枚举$j$,将$ba^j$存入哈希表。在$1-m$枚举$i$,计算$(a^m)^i$并查询是否存在$ba^j$与之相等,由于大步比小步大,所以找到的一个满足条件的$im-j$就是答案。

      $p$不为质数的情况:exBSGS

    二次剩余

      http://blog.miskcoo.com/2014/08/quadratic-residue

      https://blog.csdn.net/l_0_forever_lf/article/details/79052135

      https://blog.csdn.net/qq_35649707/article/details/78922508

      二次剩余有$O(log^2 n)$的优秀做法,但这里只介绍$O(sqrt{p})$的奇质数做法。

      二次剩余是指:求解$x^2equiv a(mod p)$

      先介绍几个概念(不一定用的上):

        1.勒让德符号:$left(frac a p ight)$为0时表示$a mod p=0$,为1时表示$a$是$p$的二次剩余(即存在模意义下平方根),为-1时表示不是。有定理(后面会证明):$$left({frac a p} ight) equiv a^{frac{p-1}{2}}(mod p)$$

        2.p一共有$frac{p+1}{2}$个二次剩余,$frac{p-1}{2}$个非二次剩余。

        因为$a^2equiv (p-a)^2(mod p)$,故至多只有$frac{p+1}{2}$个数存在平方根。

        3.$(a+b)^pequiv a^p+b^p(mod p)$。

      下面证明定理一(以下省略$mod p$):

        充分性:$a^{frac{p-1}{2}}equiv (x^2)^{frac{p-1}{2}}equiv x^{p-1}$,由费马小定理得证。

        必要性:考虑$a$在模$p$意义下的原根$g$,$aequiv g^i$,则有$g^{frac{i(p-1)}{2}}equiv 1$,取$x=g^{frac i 2}$即可。

        证毕。同时我们也得到了一个$O(sqrt{p})$求奇质数二次剩余的方法:先求出$a$的原根,再用$BSGS$求出$g^kequiv 1$,则答案为$g^{frac{k}{p-1}}$。

  • 相关阅读:
    文档API
    vi编辑器常用方法
    storm实战入门一
    redis教程
    为redis分配一个新的端口
    Lucene分页查询
    Lucene搜索方式大合集
    HBase Scan类用法
    java.util.Queue用法
    Makefile中预定义变量
  • 原文地址:https://www.cnblogs.com/HocRiser/p/9259811.html
Copyright © 2011-2022 走看看