zoukankan      html  css  js  c++  java
  • N次剩余和二次剩余

    N次剩余

    给定 (N,a,P),且 (P) 最好为质数
    可以算出 (x^Nequiv a(mod~p)) 的解
    首先可以算出 (P) 的原根 (g)
    解方程 (g^yequiv b(mod~p)),这个直接 (BSGS)
    (g^zequiv x(mod~p))
    那么 (g^{za}=g^y(mod~p)iff zaequiv y(mod~varphi(p))),这个直接 (exgcd)
    无解在 (BSGS)(exgcd) 的时候判掉,最后快速幂得到答案

    二次剩余

    (x^2equiv n(mod~p))的一个解 (x),其中 (p) 为一个奇素数

    有二次剩余的条件

    [n^{frac{p-1}{2}} equiv 1(mod~p) ]

    证明

    首先有 (n^{p-1}equiv 1(mod~p))
    若存在一个解 (a),那么 (a^{p-1}equiv 1(mod~p))(a^{2}equiv n(mod~p))
    所以

    [a^{p-1}equiv n^{frac{p-1}{2}}equiv 1(mod~p) ]

    算法一

    如果 (g)(p) 的原根,且 (g^{a}equiv n(mod~p)) 那么解就是 (g^{frac{a}{2}})

    证明

    结合上面的条件,有 (g^{afrac{p-1}{2}}equiv 1(mod~p))
    因为 (g^{p-1}equiv 1(mod~p)),那么 (a) 一定为偶数
    可以在 (Theta(sqrt{p})) 的复杂度内找到解

    算法二

    随机一个数字 (a)
    使得 (a^2-n) 不存在二次剩余,期望次数为 (2)
    定义一个新的数域,设 (omega = sqrt{a^2-n}) (类似于 (i=sqrt{-1}))
    那么所有的数都可以表示为 (a+bomega) 的形式
    根据有解的条件可以得到

    [omega^{p-1} e 1(mod~p) ]

    (omega^{2(p-1)}equiv 1(mod~p)) 所以 (omega^{p-1}equiv -1(mod~p))

    定理 ((a+omega)^{p}=a-omega)

    证明

    二项式定理展开得到 (sum_{i=0}^{p}inom{p}{i}a^iomega^{p-i})
    显然除了第 (0) 项和第 (p) 项的组合数不是 (p) 的倍数
    那么就是 (a^p+omega^{p})
    由于 (a^{p-1}equiv 1(mod~p))(omega^{p-1}equiv -1(mod~p))
    那么得到 (a^p+omega^{p}=a-omega)

    这就好了,因为 ((a-omega)(a+omega)=a^2-omega^2=n)
    所以 ((a+omega)^{frac{p+1}{2}}equiv sqrt{n}(mod~p))
    现在只要证明 ((a+omega)^{frac{p+1}{2}}) 不存在 (omega) 项就好了
    假设 ((a+omega)^{frac{p+1}{2}}=x+yomega)
    那么 ((x+yomega)^2=n)
    所以 (x=0) 或者 (y=0)
    如果 (x=0)(y e0),那么 ((x+yomega)^2=y^2(a^2-n)=n)
    因为 (a^2-n) 没有二次剩余,而 (y^2) 显然有二次剩余
    所以 (n) 没有二次剩余,矛盾
    得到 (y= 0)

    总结一下

    第一步随机一个 (a),使得(a^2-n) 不存在二次剩余
    第二步直接重载运算求出 ((a+omega)^{frac{p+1}{2}})(n) 的二次剩余

  • 相关阅读:
    Android两级嵌套ListView滑动问题的解决
    关于Android适配华为等带有底部虚拟按键的解决方案
    更加成熟的领导力素质和学习敏感度
    完美解决ScollView内嵌ListView的问题
    Gson序列化问题导致的内存溢出,tip:Background sticky concurrent mark sweep GC freed
    从功能实现到实现设计
    iOS面试题汇总
    2017计算机专业大学排名
    Buffer.from()
    Buffer.isBuffer()详解
  • 原文地址:https://www.cnblogs.com/cjoieryl/p/10192613.html
Copyright © 2011-2022 走看看