zoukankan      html  css  js  c++  java
  • 二次剩余学习笔记

    二次剩余学习笔记

    前言

    咕了很久,一直想学这算法来着,真是神仙算法。。。

    问题:

    求解(x^2 equiv n pmod{p}(p为奇素数))

    解析

    定义1

    (n)为模(p)意义下的二次剩余当且仅当(x^2 equiv n pmod{p})有解,非二次剩余同理。

    定理1

    当且仅当(n^{frac{p-1}{2}} equiv 1 pmod{p})时,(n)为二次剩余,反之,若(n^{frac{p-1}{2}} equiv -1 pmod{p}),则(n)为非二次剩余(不对(n=0)做考虑)。

    证明1

    先考虑(n^{frac{p-1}{2}})的取值情况,有:

    [n^{p-1}-1 equiv 0 pmod{p} ]

    即有:

    [(n^{frac{p-1}{2}}+1)(n^{frac{p-1}{2}}-1) equiv 0 pmod{p} ]

    所以:

    [n^{frac{p-1}{2}} equiv 1或-1pmod{p} ]

    而当(n)为二次剩余时,有(x^2 equiv n pmod{p}),又(x^{p-1} equiv 1 pmod{p}),所以:(n^{frac{p-1}{2}} equiv 1 pmod{p}),反之,若(n)为非二次剩余,那么有:(n^{frac{p-1}{2}} equiv -1 pmod{p}),得证。

    定义2

    类似复数的,我们对于模(p)意义下的非二次剩余(x),定义类似虚部的数(i=sqrt{x}),当然,这样得到一类数的表示方法(a+bi),我们类比复数定义这一类数的运算,那么这一类数的四则运算具有自封闭性。

    定理2

    (omega=a^2-n)为非二次剩余,那么((a+sqrt{omega})^{frac{p+1}{2}})(其中(sqrt{w})即可看做虚根做运算)即为(n)二次剩余的根,另一个根即为相反数。

    证明2

    先考虑一个式子((a+sqrt{omega})^{p}),用二项式定理展开,有:

    [(a+sqrt{omega})^{p}=sum_{i=0}^{p}{pchoose i}a^{p-i}{sqrt{omega}}^{i} ]

    又因为在模(p)意义下,当(i不为0或p)时,({p choose i} equiv 0 pmod{p})(展开一下就是了),那么有:

    [(a+sqrt{omega})^{p} equiv a^p+{sqrt{omega}}^p equiv a^p+w^{frac{p-1}{2}}sqrt{omega} equiv a-sqrt{w}pmod{p} ]

    所以:

    [(a+sqrt{omega})^{{p+1}} equiv (a+sqrt{omega})(a-sqrt{omega}) equiv a^2-omega equiv npmod{p} ]

    得证。

    定理3

    对于(0 lt n leq p-1),有(frac{p-1}{2})(n)为二次剩余。

    证明3

    很简单,直接枚举作为根的(x)(x)(p-1)中取值(不考虑0),而(x^2 equiv (p-x)^2)
    所以二次剩余只有(frac{p-1}{2})个取值,得证。

    那么现在的唯一问题就是如何找到合适的(a)使得(omega)满足条件,我们考虑随机,由定理3可知,(a^2-n)在模(p)意义下为非二次剩余的概率为(frac{p-1}{2p}),那么这样随机的期望次数就接近于2,可以看做是(O(1))求。自此,我们解决了这个具有特殊性的二次剩余,算法复杂度是多少呢?因为其中要快速幂,复杂度为(O(log{p}))

  • 相关阅读:
    六 . 爬虫 Xpath介绍和使用
    五. 爬虫 正则表达式
    四 . 爬虫 BeautifulSoup库参数和使用
    三 . 爬虫 url编码
    一 . 爬虫
    【HDU5952】Counting Cliques
    【HDU5521】Meeting
    【模板】回文自动机
    【CF1218E】Product Tuples
    【洛谷P2485】计算器
  • 原文地址:https://www.cnblogs.com/pkh68/p/10645107.html
Copyright © 2011-2022 走看看