知识点 - 二次剩余
知识点 - 二次剩余
解决问题类型:
求模意义下的平方根
一些公式推导有用
定义
q被称作模n的二次剩余quadratic residue 当且仅当存在x使得:
x2=q(modn)x^2=q(mod\ n) x2=q(mod n)
否则q被称作二次非剩余quadratic nonresidue
性质
两个二次剩余的乘积还是二次剩余
模n的二次剩余的数量不会超过n/2 + 1
模质数的二次剩余
模2下,所有数都是二次剩余。下面的质数不包括2
模p下有(p-1)/2个二次剩余和二次非剩余。(不包括0)
欧拉准则Euler’s criterion 可以用来判定某个数是不是模p的二次剩余:
ap−12≡{     1(modp)if there is an integer xsuch that a≡x2(modp)−1(modp)if there is no such integer.{\displaystyle a^{\tfrac {p-1}{2}}\equiv {\begin{cases}\;\;\,1{\pmod {p}}&{\text{ if there is an integer }}x{\text{ such that }}a\equiv x^{2}{\pmod {p}}\\-1{\pmod {p}}&{\text{ if there is no such integer.}}\end{cases}}}a2p−1≡{1(modp)−1(modp) if there is an integer x such that a≡x2(modp) if there is no such integer.
模p下,二次剩余的逆元是二次剩余;二次非剩余的逆元是二次非剩余。
模p下,两个非剩余的乘积是二次剩余,二次剩余乘二次非剩余是二次非剩余。
若 p ≡ 1 (mod 4) ,二次剩余的负数为二次剩余,二次非剩余的负数为二次非剩余。
若p ≡ 3 (mod 4),二次剩余的负数为二次非剩余,二次非剩余的负数为二次剩余。
平方根公式
一种特解:
如果
pmod4=3,x2modp=ap\ mod\ 4 =3,x^2\ mod\ p = a p mod 4=3,x2 mod p=a
那么 x=±pow(a,(p+1)/4,p)x = ±pow(a, (p+1)/4, p)x=±pow(a,(p+1)/4,p)
模质数p时,二次剩余a有1+(a∣p)1 + (a|p)1+(a∣p)个根
模和数n时,将n分解成不同的质数,分别求解,然后用crt合并。根的个数就是分别模这些质数的个数乘积。
当然也可以看成高次同余方程求解
求一个二次剩余
在[0,p−1][0,p−1][0,p−1]随机挑选一个数,称其为aaa ,定义 w=a2−nw=a^2-nw=a2−n 若wp−12=−1w^{\tfrac {p-1}{2}}=-1w2p−1=−1则(a+w)p+12(a+\sqrt w)^{\frac{p+1}{2}}(a+w)2p+1时一个二次剩余
有了最后一个定理,我们就可以通过随机选择a的值来找到一个满足条件的解。可以证明找到正解所需的次数的期望只有2.
struct field{int x,y;field(int a=0,int b=0){x=a;y=b;}
};
field operator*(field a,field b){return field(a.x*b.x%p+a.y*b.y%p*w%p,a.x*b.y%p+a.y*b.x%p);}int ran(){static int seed=23333;return seed=((((((ll)seed^20030927)%p+330802)%p*9410)%p-19750115+p)%p^730903)%p;
}int pows(int a,int b){int base=1;while(b){if(b&1) base=base*a%p;a=a*a%p;b/=2;}return base;
}field powfield(field a,int b){field base=field(1,0);while(b){if(b&1) base=base*a;a=a*a;b/=2;}return base;
}int legander(int x){int a=pows(x,(p-1)/2);if(a+1==p) return -1;return a;
}int surplus(int x){int a;if(legander(x)==-1) return 0;while(1){a=ran()%p;w=((a*a-x)%p+p)%p;if(legander(w)==-1) break;}field b=field(a,1);b=powfield(b,(p+1)/2);return b.x;
}
复杂度:
log(p)log(p)log(p)
例题
2019牛客多校#9 B Quadratic equation 求模意义下二次方程。
给你
(x+y)modp=b(x + y)\ mod\ p = b(x+y) mod p=b
(x×y) mod p=c(x \times y) \bmod p=c(x×y)modp=c
即解x2−bx+c≡0x^2-bx+c\equiv 0x2−bx+c≡0
代码
#include<cstdio>
#define ll long long
const int mo=1e9+7,inv2=(mo+1)/2;
int Pow(int x,int n){int k=1;for (;n;n>>=1,x=(ll)x*x%mo)if (n&1) k=(ll)k*x%mo;return k;
}
int main(){int TEST;scanf("%d",&TEST);for (;TEST--;){int a,b;scanf("%d%d",&a,&b);int k=(((ll)a*a-4ll*b)%mo+mo)%mo;int v=Pow(k,(mo+1)/4);if ((ll)v*v%mo!=k){puts("-1 -1");continue;}int x=(ll)(v+a)*inv2%mo;int y=(a-x+mo)%mo;if (x>y) x^=y,y^=x,x^=y;printf("%d %d\n",x,y);}
}
知识点 - 二次剩余相关推荐
- 常用ACM知识点清单(未完待续)
文章目录 图论 动态规划 数论 组合数学 计算几何 数据结构 字符串 博弈 其它 之后会不定时更新,并且尽可能的把可以学到每个知识点的链接粘上来 按照个人意愿我将知识点难度进行分级,也可以说是学习的先 ...
- 【算法讲18:二次剩余】勒让德符号 | 欧拉判别法 | Cipolla 算法
[算法讲18:二次剩余] Source\mathfrak{Source}Source ⌈\lceil⌈二次剩余⌋\rfloor⌋与⌈\lceil⌈二次非剩余⌋\rfloor⌋ ⌈\lceil⌈二次互反 ...
- (转载)二次剩余(知识总结+板子整理)
思路来源 https://blog.csdn.net/kele52he/article/details/78897187(二次剩余) https://blog.csdn.net/stevensonso ...
- 解释型语言与编译型的必须知识点
解释型语言与编译型的必须知识点 概念: 计算机不能理解直接理解高级语言,只能理解机器语言,所以必须把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序. 翻译的方式有两种: 编译 解释 两种翻译 ...
- YOLOV4知识点分析(二)
YOLOV4知识点分析(二) 数据增强相关-mixup 论文名称:mixup: BEYOND EMPIRICAL RISK MINIMIZATION 论文地址:https://arxiv.org/ab ...
- YOLOV4知识点分析(一)
YOLOV4知识点分析(一) 简 介 yolov4论文:YOLOv4: Optimal Speed and Accuracy of Object Detection arxiv:https://arx ...
- 你需要掌握的有关.NET DateTime类型的知识点和坑位 都在这里
引言 DateTime数据类型是一个复杂的问题,复杂到足以让你在编写[将日期从Web服务器返回到浏览器]简单代码时感到困惑. ASP.NET MVC 5和 Web API 2/ASP.NETCo ...
- 简练软考知识点整理-范围确认易混概念
与确认范围容易混淆的知识点包括,确认范围与核实产品.质量控制.项目收尾,下面进行比较分析. (1)确认范围与核实产品 核实产品是针对产品是否完成,在项目(或阶段)结束时由发起人或客户来验证,强调产品是 ...
- 朴素贝叶斯知识点概括
1. 简述 贝叶斯是典型的生成学习方法 对于给定的训练数据集,首先,基于特征条件独立假设,学习输入/输出的联合概率分布:然后,基于此模型,对于给定的输入x,根据贝叶斯定理求后验概率最大的输出y 术语说 ...
最新文章
- loadrunner另类玩法【测试帮日记公开课】
- 屏幕坐标系和视口坐标系
- php的wsgi框架结构,理解 WSGI 框架
- TCP/IP的分层负载
- 这些棘手的Java面试题,答案你都知道吗?
- 无线路由器在手机上如何连接服务器,192.168.10.1路由器手机怎么设置? | 192路由网...
- [转载] python中字符串编码形式及其所占字节
- ML Mastery 博客文章翻译(二)20220116 更新
- 【三边定位】 演示程序V0.1
- linux命令th,Linux 第13天 文本操作命令
- linux 文件隐藏权限,linux文件基本权限、默认权限、隐藏权限和ACL权限
- jQuery2.x源码解析(设计篇)
- 基于神经网络的图像识别
- 我的世界联机侠怎么删除java_我的世界联机侠怎么增加房间人数
- 【95】太空射击游戏——玩家代码
- HttpWatch(功能详细介绍)
- php加载COM组件失败原因及其解决方法
- MIT 6.824 lab3 KVRaft
- kNN_约会网站匹配效果改进实现代码
- CG cosh, exp, sinh, smoothstep, tanh, perlin_easeCurve1/2 曲线
热门文章
- 微信朋友圈“文字发”操作技巧,轻松实现不带图发布
- psnr用matlab读取一幅图像,matlab实现PSNR
- java中char类型_Java-char类型详解
- 如何用eclipse来创建软件
- error C2065: '_lpw ' : undeclared identifier
- 2BizBox ERP v4.0.5官方版
- Vue v-on指令
- 【微电网优化】基于matlab YALMIP求解微网(光伏+风电+蓄电池+微电网+柴油机)优化调度问题【含Matlab源码 2266期】
- 【优化运行】基于matlab高比例风电电力系统储能运行及配置分析【含Matlab源码 2273期】
- 重回魔都,焕新复用 | 经典款3系产品快速落地服务第三城