定义:

对于方程x2≡n(mod  p)  ,  nx^2\equiv n (mod \;p)\;,\;nx2≡n(modp),n为p的二次剩余 , x为该二次同余方程的解

就如字面意思一样 , n就是一个二次项%p后的剩余

应用:

求n%p  ,\sqrt{n}\%p\;,n​%p,若n为p的二次剩余 , 那么很明显n%p=x%p\sqrt{n}\%p=x\%pn​%p=x%p

简单的说 , 如果该二次同余方程有解,那么n可以在模p的意义下开根号。

二次同余方程求解(%奇素数):

勒让德符号(legender symbol)→(np)\to (\dfrac{n}{p})→(pn​)
表示n是否为p的二次剩余 , 1和-1表示是与否 , 0表示n为0的情况

定理 1:

(np)=np−12(mod  p)(\dfrac{n}{p})=n^{\frac{p-1}{2}}(mod\;p)(pn​)=n2p−1​(modp)

也就是说知道了n和p相当于知道了这个符号的值

定理 2:

若找到一个a使 a2−n=w,且(wp)=−1a^2-n=w , 且(\dfrac{w}{p})=-1a2−n=w,且(pw​)=−1

则x=(n+w)p+12x=(n+\sqrt w)^{\frac{p+1}{2}}x=(n+w​)2p+1​为x2≡n(mod  p)x^2\equiv n(mod \;p)x2≡n(modp)的解

定理3可以证明随意找一个a就有50%的几率符合要求

定理 3:

对于二次同余方程x2≡n(mod  p)x^2\equiv n(mod\;p)x2≡n(modp)有p−12+1\frac{p-1}{2}+12p−1​+1个n使此方程有解

本篇博客不进行定理的证明 , 因为过程打出来会过于冗长 , 很多初学者都会对这种一大段的证明心生畏惧 .

代码实现:

#include <iostream>
#include <ctime>
using namespace std;
typedef long long LL;
#define random(a,b) (rand()%(b-a+1)+a)
LL quick_mod(LL a, LL b, LL c) {LL ans = 1;while (b) {if (b % 2 == 1)ans = (ans*a) % c;b /= 2;a = (a*a) % c;}return ans;
}LL p;
LL w;//二次域的D值
bool ok;//是否有解struct QuadraticField { //二次域LL x, y;QuadraticField operator*(QuadraticField T) { //二次域乘法重载QuadraticField ans;ans.x = (this->x*T.x%p + this->y*T.y%p*w%p) % p;ans.y = (this->x*T.y%p + this->y*T.x%p) % p;return ans;}QuadraticField operator^(LL b) { //二次域快速幂QuadraticField ans;QuadraticField a = *this;ans.x = 1;ans.y = 0;while (b) {if (b & 1) {ans = ans*a;b--;}b /= 2;a = a*a;}return ans;}
};LL Legender(LL a) { //求勒让德符号LL ans=quick_mod(a, (p - 1) / 2, p);if (ans + 1 == p)//如果ans的值为-1,%p之后会变成p-1。return -1;elsereturn ans;
}LL Getw(LL n, LL a) { //根据随机出来a的值确定对应w的值return ((a*a - n) % p + p) % p;//防爆处理
}LL Solve(LL n) {LL a;if (p == 2)//当p为2的时候,n只会是0或1,然后0和1就是对应的解return n;if (Legender(n) == -1)//无解ok = false;srand((unsigned)time(NULL));while (1) { //随机a的值直到有解a = random(0, p - 1);w = Getw(n, a);if (Legender(w) == -1)break;}QuadraticField ans,res;res.x = a;res.y = 1;//res的值就是a+根号wans = res ^ ((p + 1) / 2);return ans.x;
}int main() {LL n,ans1,ans2;while (scanf("%lld%lld",&n,&p)!=EOF) {ok = true;n %= p;ans1 = Solve(n);ans2 = p - ans1;//一组解的和是pif (!ok) {printf("No root\n");continue;}if (ans1 == ans2)printf("%lld\n", ans1);elseprintf("%lld %lld\n", ans1, ans2);}
}

二次剩余,二次同余方程相关推荐

  1. 【TOJ1132】Square Root,二次同余方程

    传送门 写在前面:ACdreamer大神太强辣!希望能达到他一半的高度啊! 思路:ACdreamer's blog 裸题调了好久ORZ 注意:关于(a+√w)^((p+1)/2)的求法,我至今都没太想 ...

  2. matlab二次同余方程,解同余式ax ≡ c(mod m)

    将式子变形为 ax-c=my 可以看出原式有解当且仅当线性方程ax-my=c有解 设g = gcd(a, m) 则所有形如ax-my的数都是g的倍数 因此如果g不整除c则原方程无解. 下面假设g整除c ...

  3. ECC与数论、数论史、代数,二次剩余符号的程序计算,高次剩余,高斯和 2013-03-23 21:52:49

    CoCoA 2015-10-9 22:49 Computational Commutative Algebra http://vdisk.weibo.com/s/Fst8dC2oag9yO?categ ...

  4. 【算法讲18:二次剩余】勒让德符号 | 欧拉判别法 | Cipolla 算法

    [算法讲18:二次剩余] Source\mathfrak{Source}Source ⌈\lceil⌈二次剩余⌋\rfloor⌋与⌈\lceil⌈二次非剩余⌋\rfloor⌋ ⌈\lceil⌈二次互反 ...

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

    定义: \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 ...

  6. 格雷通路 算法 java,Java算法与数据结构教程

    北上广容不下肉身, 三四线放不下灵魂, 程序员里没有穷人, 有一种土豪叫 算法工程师. 程序 = 数据结构 + 算法 程序是为了解决实际问题而存在的.然而为了解决问题,必定会使用到某些数据结构以及设计 ...

  7. kk_想要学习的知识

    2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...

  8. 尹成学院区块链 Go 学习大纲-取得大纲试看视频联系微信yinchengak48

    网址:http://www.1cxy.net GO技术交流QQ群:254416566 所处阶段 主讲内容 技术要点 学习目标 第一阶段Go语言开发入门实战 1.Go语言介绍及开发环境搭建 1.Go语言 ...

  9. 巅峰极客2022初赛 部分题解

    文章目录 Crypto point-power strange curve Misc easy_Forensic Lost 巅峰极客2022初赛,团队共解决7道题,合计2234分,排名第11位,晋级复 ...

最新文章

  1. 【新】欢庆网自动搜索请柬console方法,面对多种网站改版的情况
  2. 人工智能在牙科医疗领域是一片蓝海
  3. Yolov5身份证检测——C++ OpenCV DNN推理
  4. 并发基础(七):Thread 类的sleep()、yeild()、join()
  5. 本周阅读清单:从NeurIPS 2020到EMNLP 2020
  6. 火焰效果材质实现_利用噪音图制作一个纸张燃烧的效果
  7. 使用共享网口方式访问BMC管理控制器
  8. 面向对象-多态的实现
  9. matlab 3sls,几种常用的计量经济学软件
  10. 层次分析法原理及计算过程详解
  11. AI绘画升温、AI写作降温,AIGC玩“变脸”
  12. matlab中全局变量的作用域,【转载】Matlab的global变量
  13. 【C#】Winform常用属性和事件笔记大全(入门者参考)
  14. 【Cubase11】音乐工作站:宿主软件 - 基础入门笔记
  15. android授权新浪微博 服务端,android应用关于新浪微博授权登陆解决方案
  16. 捋一捋python日期时间处理(下)
  17. checkpoint NGFW 实验(一)
  18. Windows SubSystem for Linux(WSL)设置默认和设置默认登陆用户
  19. Visual Studio Ultimate 2013 下载地址+序列号
  20. 华尔街人必读40本金融佳作

热门文章

  1. windows 脚本taskkill强制关闭进程报拒绝访问
  2. 标准FSK调制解调matlab仿真
  3. 本地计算机无法启动1053,服务启动1053错误解决方法_错误1053无法启动服务怎么办...
  4. 使用IIS服务搭建一个本地的局域网服务器-共享自己发布的网站
  5. Xcode - VALID_ARCHS
  6. MySQL问题记录(Linux)
  7. 服务器内存型号品牌榜,服务器内存品牌有哪些
  8. lasermaker作品图纸
  9. 自定义汇总表,财务季报数据评估
  10. 密码学复习一:古典密码