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

    这个其实很早之前就想写了,只不过一直没有时间。
    之前稍微学了一下,但由于没有留下深刻的印象,所以学了等于白学。
    SCOI2018有一道题就是裸的二次剩余题,比赛时做不出来真是气炸了。


    概念

    如果(p)为奇素数。
    (n)在模(p)意义下能被开方,就称(n)是模(p)意义下的二次剩余。
    即存在(x^2equiv n (mod p))


    勒让德符号

    [left(frac{n}{p} ight)= egin{cases} 1,&n ext{在模$p$意义下是二次剩余}\ -1,&n ext{在模$p$意义下是非二次剩余}\ 0,&nequiv0pmod p end{cases}]

    这个东西可以用个很方便的东西求出来:

    [left(frac{n}{p} ight)equiv n^{frac{p-1}{2}} pmod p ]

    证明:如果(n)是模(p)意义下的二次剩余,即存在(x^2 equiv n pmod p)
    那么就有(n^{frac{p-1}{2}}equiv x^{p-1}equiv 1 pmod p)


    Cipolla算法

    接下来的问题是如何解这个方程。
    可以用BSGS算法艹过去。
    但是这里有个更加高级的叫Cipolla算法。

    前置技能

    定理一

    (n^2equiv (p-n)^2 pmod p)
    证明略。

    定理二

    (p)的二次剩余个数只有(frac{p-1}{2})
    考虑假如有两个不同的数(x)(y)满足(x^2equiv y^2 pmod p)
    (p|(x+y)(x-y))
    所以(x+yequiv p)
    所以说,每个满足(xequiv y pmod p)(x)(y),它们的平方是相同的。
    得证。

    具体算法

    假如要对(n)开方(保证其为模(p)意义下的二次剩余)
    随机一个(a)使得(a^2-n)是非二次剩余(期望次数两次)
    (omega^2equiv a^2-n pmod p)
    计算((a+omega)^{frac{p+1}{2}})作为其中达到一个解,另一个解通过定理一求出。

    (omega)看起来是无解的,但可以像对待虚数的(i)一样对待它。
    计算的时候把它当负复数计算,算完之后就会惊奇地发现虚数部分消失了。

    证明

    定理三

    (omega^pequiv -omega pmod p)

    证明:(omega^pequiv omega^{p-1}omega equiv(a^2-n)^{frac{p-1}{2}}omegaequiv -omega pmod p)

    定理四

    ((a+b)^pequiv a^p+b^p pmod p)
    二项式展开完事。


    [left((a+omega)^{frac{p+1}{2}} ight)^2 \ equiv (a^p+omega^p)(a+omega) \ equiv (a-omega)(a+omega) \ equiv a^2-(a^2-n) \ equiv n]

    证毕……
    既然它可以推出来,那就可以简单地认为它虚部在计算的过程中会消去……

  • 相关阅读:
    Bootstrip的相关介绍
    Django的ORM主外键约束实现
    Django基于ORM数据库配置
    Django的安装与配置
    ORM(关系对象映射)框架之面向对象
    pymysql模块的数据操作
    SQL语句实践
    mysql 数据库的基本操作语法
    算法训练 矩阵乘法
    算法训练 字串统计
  • 原文地址:https://www.cnblogs.com/jz-597/p/12796876.html
Copyright © 2011-2022 走看看