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}))

  • 相关阅读:
    SQL里的EXISTS与in、not exists与not in
    N秒后自动跳转
    Array类型的扩展
    css中block与inline的区别
    数据绑定表达式语法(Eval,Bind区别)
    case
    SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较 (转载)
    内容随鼠标漂移
    IIS下下伪静态html(URL Rewrite)设置方法
    sql查询含有某列名的所有表
  • 原文地址:https://www.cnblogs.com/pkh68/p/10645107.html
Copyright © 2011-2022 走看看