文章目录

  • 一、介绍
    • 1.定义
    • 2.定理
  • 二、判别
    • 1.勒让德符号(Legendre Symbol)
    • 2.欧拉判别准则(Euler's criterion)
      • (1)内容
      • (2)证明
      • (3)注意
  • 三、x2≡n(modx^2≡n(modx2≡n(mod p)p)p)——奇波拉算法(Cipolla's algorithm)
    • 1.操作
    • 2.证明x=(a+a2−n)p+12x=(a+\sqrt{a^2-n})^{\frac{p+1}{2}}x=(a+a2−n​)2p+1​为解
  • 四、模板题
    • 代码
  • 五、x2≡n(modx^2≡n(modx2≡n(mod pk)p^k)pk)(gcd(x,p)=1,p为奇质数)

一、介绍

1.定义

当存在某个xxx,可以使得式子x2≡n(modx^2≡n(modx2≡n(mod p)p)p)成立时,称“n是模p的二次剩余”;
当对任意x不成立时,称“n是模 p的二次非剩余”。

例如,满足模11的二次剩余的数有:1,3,4,5,61,3,4,5,61,3,4,5,6
模11二次非剩余的数有:2,6,7,8,102,6,7,8,102,6,7,8,10

至于000,即不是二次剩余也不是二次非剩余。

2.定理

对于方程x2≡n(modx^2≡n(modx2≡n(mod p)p)p),如果ppp是一个奇质数(即ppp为大于2的质数),那么在集合{1,2,…,p−1}\{1,2,…,p-1\}{1,2,…,p−1}中,有p−12\frac{p-1}{2}2p−1​个数满足模ppp的二次剩余,剩下的p−12\frac{p-1}{2}2p−1​个数为模ppp的二次非剩余。

证明:

第一步:对于任何一个整数XXX来说,X2%pX^2\%pX2%p都可以写为:x2%p(x∈{1,2,…,p−1})x^2\%p(x \in \{1,2,…,p-1 \})x2%p(x∈{1,2,…,p−1})

X=k∗p+xX=k*p+xX=k∗p+x
X2%p=(k∗p+x)2%p⇒x2%pX^2\%p=(k*p+x)^2\%p\Rightarrow x^2\%pX2%p=(k∗p+x)2%p⇒x2%p

第二步:证明x2x^2x2与(p−x)2(p-x)^2(p−x)2在模ppp条件下同余

将(p−x)2(p-x)^2(p−x)2进行展开得到(p2−2px+x2)(p^2-2px+x^2)(p2−2px+x2),再对ppp取模,得到x2x^2x2
证毕。

第三步:证明在{1,2,…,p−12}\{1,2,…,\frac{p-1}{2} \}{1,2,…,2p−1​}中,不同的xxx所对应x2x^2x2对p取模的结果不同
反证法:若存在不同的xxx,yyy处于集合中,且x2≡y2(modx^2≡y^2(modx2≡y2(mod p)p)p)
那么就推出p∣(x2−y2)⇒p∣(x−y)(x+y)p|(x^2-y^2)\Rightarrow p|(x-y)(x+y)p∣(x2−y2)⇒p∣(x−y)(x+y)

由于(x+y)<p(x+y)<p(x+y)<p,这个式子成立的唯一可能就是x==yx==yx==y,与条件相矛盾。
证毕。

由上方的三个证明可以得知,前p−12\frac{p-1}{2}2p−1​个数对应x2x^2x2对p取模的结果与后p−12\frac{p-1}{2}2p−1​个数相同,而且,前p−12\frac{p-1}{2}2p−1​个数对应x2x^2x2对p取模的结果各自不同,说明集合{1,2,…,p−1})\{1,2,…,p-1 \}){1,2,…,p−1})对应的x2x^2x2对p取模的结果有p−12\frac{p-1}{2}2p−1​个,再结合证明一,进行推广,所有整数对应的x2x^2x2对p取模的结果有p−12\frac{p-1}{2}2p−1​个

也就是在集合{1,2,…,p−1}\{1,2,…,p-1\}{1,2,…,p−1}中,有p−12\frac{p-1}{2}2p−1​个数满足模ppp的二次剩余,剩下的p−12\frac{p-1}{2}2p−1​个数为模ppp的二次非剩余。


二、判别

1.勒让德符号(Legendre Symbol)

如果ppp是一个奇质数,aaa是一个整数,可以使用(ap)(\frac{a}{p})(pa​)来表示aaa是否为模ppp二次剩余,或者是既不是二次剩余,也不是二次非剩余。

2.欧拉判别准则(Euler’s criterion)

(1)内容

如果ppp是一个奇质数,aaa是一个整数此时存在等式:
(ap)=ap−12(mod(\frac{a}{p})=a^{\frac{p-1}{2}}(mod(pa​)=a2p−1​(mod p)p)p)

(2)证明

1. 若(ap)=0(\frac{a}{p})=0(pa​)=0
a=kp⇒ap−12=(kp)p−12a=kp\Rightarrow a^{\frac{p-1}{2}}=(kp)^{\frac{p-1}{2}}a=kp⇒a2p−1​=(kp)2p−1​
(kp)p−12≡0(mod(kp)^{\frac{p-1}{2}}≡0(mod(kp)2p−1​≡0(mod p)p)p)
所以此时ap−12=0=(ap)a^{\frac{p-1}{2}}=0=(\frac{a}{p})a2p−1​=0=(pa​)

2. 若(ap)=1(\frac{a}{p})=1(pa​)=1
aaa与x2x^2x2同余,而且x∈{1,2,…,p−1}x\in\{1,2,…,p-1\}x∈{1,2,…,p−1},
由于xxx与ppp互质,根据费马小定理,可知:
xp−1≡1(modx^{p-1}≡1(modxp−1≡1(mod p)p)p)
⇒(x2)p−12≡1(mod\Rightarrow (x^2)^{\frac{p-1}{2}}≡1(mod⇒(x2)2p−1​≡1(mod p)=(ap)p)=(\frac{a}{p})p)=(pa​)

3. 若(ap)=−1(\frac{a}{p})=-1(pa​)=−1
此时aaa与i∗ji*ji∗j同余,且i≠j,i、j∈{1,2,…,p−1}i\neq j,i、j\in\{1,2,…,p-1\}i​=j,i、j∈{1,2,…,p−1}
i∗j≡a(modi*j≡a(modi∗j≡a(mod p)p)p)
⇒i≡a∗j−1(mod\Rightarrow i≡a*j^{-1}(mod⇒i≡a∗j−1(mod p)p)p)

第一步证明不同的iii所对应的jjj是不同的。

反证法:若存在由于I≡a∗j−1(mod由于I≡a*j^{-1}(mod由于I≡a∗j−1(mod p)p)p)与i≡a∗j−1(modi≡a*j^{-1}(modi≡a∗j−1(mod p)p)p)
则可以写为:I−i=kpI-i=kpI−i=kp
由于i、I∈{1,2,…,p−1}i、I\in\{1,2,…,p-1\}i、I∈{1,2,…,p−1}
唯有i==Ii==Ii==I时,才会成立,产生矛盾。
证毕。

第二步证明ap−12=(p−1)!a^{\frac{p-1}{2}}=(p-1)!a2p−1​=(p−1)!

可以将集合{1,2,…,p−1}\{1,2,…,p-1\}{1,2,…,p−1}内的p−1p-1p−1个数分为p−12\frac{p-1}{2}2p−1​组,每组里面的两个数的积与aaa同余,所以(p−1)!(p-1)!(p−1)!即ap−12a^{\frac{p-1}{2}}a2p−1​.

根据威尔逊定理:p 是质数的充要条件为 (p−1)!≡−1(mod(p−1)! ≡ −1 (mod(p−1)!≡−1(mod p)p)p)
此时可以得到:ap−12=(p−1)!≡−1(moda^{\frac{p-1}{2}}=(p-1)!≡ −1 (moda2p−1​=(p−1)!≡−1(mod p)p)p)

(3)注意

以算法实现时,直接计算ap−12a^{\frac{p-1}{2}}a2p−1​模ppp的结果将得到p−1p-1p−1,所以也可以表示为:
ap−12%p={1(ap)=1p−1(ap)=−10(ap)=0a^{\frac{p-1}{2}}\%p=\begin{cases} 1 & (\frac{a}{p})=1\\ p-1 & (\frac{a}{p})=-1 \\ 0 & (\frac{a}{p})=0 \\ \end{cases} a2p−1​%p=⎩⎪⎨⎪⎧​1p−10​(pa​)=1(pa​)=−1(pa​)=0​

三、x2≡n(modx^2≡n(modx2≡n(mod p)p)p)——奇波拉算法(Cipolla’s algorithm)

求解方程x2≡n(modx^2≡n(modx2≡n(mod p)p)p)

1.操作

(1)先利用欧拉判别准则判断nnn是否满足对模ppp二次剩余,若满足进行下一操作,若不满足,则结束。

(2) 通过随机试错的方法从集合{0,1,2,...,p−1}\{0,1,2,...,p-1\}{0,1,2,...,p−1}中找到一个aaa,且a2−na^2-na2−n满足模ppp的二次非剩余,即(a2−np)==−1(\frac{a^2-n}{p})==-1(pa2−n​)==−1

(3)x=(a+a2−n)p+12x=(a+\sqrt{a^2-n})^{\frac{p+1}{2}}x=(a+a2−n​)2p+1​就是一个解,由于x2x^2x2与(p−x)2(p-x)^2(p−x)2同余,所以还有第二个解(p−x)(p-x)(p−x)

2.证明x=(a+a2−n)p+12x=(a+\sqrt{a^2-n})^{\frac{p+1}{2}}x=(a+a2−n​)2p+1​为解

大佬的证明

重点在于将上方的定理推导到复数域中。


四、模板题

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;LL quick_mod(LL a, LL b, LL m)
{LL ans = 1;a %= m;while(b){if(b & 1){ans = ans * a % m;b--;}b >>= 1;a = a * a % m;}return ans;
}struct T
{LL p, d;
};LL w;//二次域乘法
T multi_er(T a, T b, LL m)
{T ans;ans.p = (a.p * b.p % m + a.d * b.d % m * w % m) % m;ans.d = (a.p * b.d % m + a.d * b.p % m) % m;return ans;
}//二次域上快速幂
T power(T a, LL b, LL m)
{T ans;ans.p = 1;ans.d = 0;while(b){if(b & 1){ans = multi_er(ans, a, m);b--;}b >>= 1;a = multi_er(a, a, m);}return ans;
}//求勒让德符号
LL Legendre(LL a, LL p)
{return quick_mod(a, (p-1)>>1, p);
}LL mod(LL a, LL m){a %= m;if(a < 0) a += m;return a;
}LL Solve(LL n,LL p){if(p == 2) return 1;if (Legendre(n, p) + 1 == p)//为二次非剩余 return -1;LL a = -1, t;while(true){a = rand() % p;t = a * a - n;w = mod(t, p);if(Legendre(w, p) + 1 == p) break;}T tmp;tmp.p = a;tmp.d = 1;T ans = power(tmp, (p + 1)>>1, p);return ans.p;
}int main(){int t;cin>>t;while(t--){int n, p;cin>>n>>p;n%=p;int a = Solve(n, p);if(a == -1){cout<<"Hola!"<<endl; continue;}int b = p - a;if(a > b) swap(a, b);if(a == b)cout<<a<<endl;elsecout<<a<<" "<<b<<endl;}return 0;
}

五、x2≡n(modx^2≡n(modx2≡n(mod pk)p^k)pk)(gcd(x,p)=1,p为奇质数)

先解同余式x2≡n(modx^2≡n(modx2≡n(mod p)p)p)

设解为rrr,即r2≡n(modr^2≡n(modr2≡n(mod p)p)p)
转化可得:r2−n=mpr^2-n=mpr2−n=mp ⇒(r2−n)k=(mp)k\Rightarrow (r^2-n)^k=(mp)^k⇒(r2−n)k=(mp)k

用www表示n\sqrt{n}n​

上式就变为了(r+w)k(r−w)k=(mp)k(r+w)^k(r-w)^k=(mp)^k(r+w)k(r−w)k=(mp)k

进行二项式展开,
(r+w)k=Ck0rk+Ck1rk−1w...+Ckk−1rwk−1+Ckkwk⇒t+u∗w(r+w)^k=C_k^0r^k+C_k^1r^{k-1}w...+C_k^{k-1}rw^{k-1}+C_k^kw^k\Rightarrow t+u*w(r+w)k=Ck0​rk+Ck1​rk−1w...+Ckk−1​rwk−1+Ckk​wk⇒t+u∗w
(r−w)k=Ck0rk+Ck1rk−1(−w)...+Ckk−1r(−w)k−1+Ckk(−w)k⇒t−u∗w(r-w)^k=C_k^0r^k+C_k^1r^{k-1}(-w)...+C_k^{k-1}r(-w)^{k-1}+C_k^k(-w)^k\Rightarrow t-u*w(r−w)k=Ck0​rk+Ck1​rk−1(−w)...+Ckk−1​r(−w)k−1+Ckk​(−w)k⇒t−u∗w

仅当(−w)(-w)(−w)的次数为偶次时才会作用于ttt,此时负号相抵消,故两式能够构成一个平方差的形式。

上式就变为了t2−u2∗n=(mp)kt^2-u^2*n=(mp)^kt2−u2∗n=(mp)k
即t2−u2∗n≡0(modt^2-u^2*n≡0(modt2−u2∗n≡0(mod pk)p^k)pk)

处理得t2≡u2n(modt^2≡u^2n(modt2≡u2n(mod p)p)p)

通过二项式展开的式子,有gcd(p,u)==1gcd(p,u)==1gcd(p,u)==1(暂未证明,待补充)

通过消去律,可以得到:t2(u−1)2≡n(modt^2(u^{-1})^2≡n(modt2(u−1)2≡n(mod p)p)p)
通过求逆元的方法可以求出u−1u^{-1}u−1

此时得出了第一个解x=t∗inv(u)(modx=t*inv(u)(modx=t∗inv(u)(mod pk)p^k)pk)
再根据之前的同余关系x2≡(p−x)2(modx^2≡(p-x)^2(modx2≡(p−x)2(mod p)p)p)
所以还有第二个解(pk−t∗inv(u))(mod(p^k-t*inv(u))(mod(pk−t∗inv(u))(mod pk)p^k)pk)

例:求方程x2≡13(modx^2≡13(modx2≡13(mod 27)27)27)的解

可以求出t=40,u=16,inv(u)=22t=40,u=16,inv(u)=22t=40,u=16,inv(u)=22
所以第一个解为t∗inv(u)=(40∗22)%27=16t*inv(u)=(40*22)\%27=16t∗inv(u)=(40∗22)%27=16
第二个解就是pk−x=27−16=11p^k-x=27-16=11pk−x=27−16=11

为了方便理解,也可以写为x≡±11(modx≡\pm11(modx≡±11(mod 27)27)27)


二次同余方程(二次剩余)相关推荐

  1. 初等数论--二次剩余与二次同余方程--既约剩余系中二次剩余的个数

    初等数论--二次剩余与二次同余方程--既约剩余系中二次剩余的个数 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一 ...

  2. 初等数论--二次剩余与二次同余方程--成为二次剩余的充要条件

    初等数论--二次剩余与二次同余方程--成为二次剩余的充要条件 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系 ...

  3. 初等数论--二次剩余与二次同余方程--勒让德符号Legendre,高斯引理,雅可比符号Jacobi symbol

    初等数论--二次剩余与二次同余方程--勒让德符号Legendre,高斯引理,雅可比符号Jacobi symbol 勒让德符号Legendre 高斯引理 雅可比符号Jacobi symbol 博主是初学 ...

  4. 初等数论--二次剩余与二次同余方程--二次互反律

    初等数论--二次剩余与二次同余方程--二次互反律 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列:初等数论 ...

  5. NOI数学:二次同余方程的解法

    高精度取模 高精度取模_to_more_excellent的博客-CSDN博客_c++高精度取模 C++ P1082 同余方程 C++ P1082 同余方程_ice_word的博客-CSDN博客_c+ ...

  6. 二次同余方程模合数的一般解法

    0.不讨论复杂情况的解释 对于一般的二次同余方程形如 可以通过配方化为下式 可通过换元,得到 解出X的取值,然后用2ax+b回带,用扩展欧几里得解线性同余方程就可以得到方程本来的解 注意上式得到了一般 ...

  7. 信奥中的数学:孙子定理 中国剩余定理

    孙子定理 中国剩余定理 孙子定理 中国剩余定理_Dreamer Thinker Doer-CSDN博客 中国剩余问题(简介+详解) 中国剩余问题(简介+详解)_dreamzuora的博客-CSDN博客 ...

  8. 数论基础:模奇素数的二次剩余 (1)

    注意: 本文讨论的是模奇素数的二次剩余 目前不打算写二次互反律,不易写明白 什么是二次剩余 求解模小素数的二次同余方程 求解模小素数的二次方程,只需要遍历 Zp⋆\mathbb{Z}_p^{\star ...

  9. 二次剩余推理及其求解过程

    定义: \quad给出一个式子x2≡n(modp)x^2≡n(mod p)x2≡n(modp),再给出nnn和ppp,如果能求得一个x满足该式子,即xxx满足x2=n+kp,k∈Zx^2=n+kp,k ...

最新文章

  1. Spring Cloud Alibba教程:如何使用Nacos作为配置中心
  2. 09机器学习实战之多元线性回归
  3. skyline B/S模式下脚本实现输出视频
  4. Redis实现发布与订阅(转)
  5. HTML5 file api读取文件的MD5码工具
  6. [转载]Manually configuring Microsoft Internet Information Services (IIS)
  7. 别瞎找了,你要的C语言经典示例都在这~
  8. em表示什么长度单位_使用相对长度单位em布局网页内容
  9. Spring MVC浅入浅出——不吹牛逼不装逼
  10. mysql navicat 多语句_使用Navicat多对多关系SQL语句在MySQL中实现
  11. ASP 中用Ctrl+Enter提交表单
  12. 2019支付版/聚合支付第三方支付/四方支付系统/提供技术咨询服务
  13. camera中文版软件 ip_摄像头监控软件|IP Camera Viewer V 3.0.4.0 官方版-完美软件下载...
  14. 器件选型--电源电容滤波
  15. Android material design 之 BottomSheet基础入门
  16. 火山引擎发布云操作系统 veLinux
  17. FPGA:ov7725摄像头通过VGA/HDMI显示RGB565格式的图像
  18. 关于ReportingService配置邮件发送报表到其他邮箱的配置
  19. 各台平台电商API接口吊桶,API接口分类
  20. 简易的定时发送生日邮件功能(Listener+定时器+使用java发送邮件)

热门文章

  1. 国家信息安全水平考试(NISP一级)考试题库4
  2. python入门爬虫实例(含代码)
  3. 电脑微信2.9.0测试版更新内容
  4. 残缺的LSM框架启动分析
  5. 4个公用计算机网络设置路由器,一个带猫的路由和一个四口路由器将四台计算机连接怎样设置...
  6. lisp 自带dcl_Lisp教程(下册 DCL编程)彩版
  7. disabled属性的添加与移除
  8. !和~的区别(逻辑取反和按位取反)
  9. 帝国时代2开源克隆版 源码下载OpenAge (c/c++)
  10. Microsoft 365管理和报告工具