知识点 - 二次剩余

解决问题类型:

求模意义下的平方根

一些公式推导有用

定义

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)

欧拉准则Eulers 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);}
}

知识点 - 二次剩余相关推荐

  1. 常用ACM知识点清单(未完待续)

    文章目录 图论 动态规划 数论 组合数学 计算几何 数据结构 字符串 博弈 其它 之后会不定时更新,并且尽可能的把可以学到每个知识点的链接粘上来 按照个人意愿我将知识点难度进行分级,也可以说是学习的先 ...

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

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

  3. (转载)二次剩余(知识总结+板子整理)

    思路来源 https://blog.csdn.net/kele52he/article/details/78897187(二次剩余) https://blog.csdn.net/stevensonso ...

  4. 解释型语言与编译型的必须知识点

    解释型语言与编译型的必须知识点 概念: 计算机不能理解直接理解高级语言,只能理解机器语言,所以必须把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序. 翻译的方式有两种: 编译 解释 两种翻译 ...

  5. YOLOV4知识点分析(二)

    YOLOV4知识点分析(二) 数据增强相关-mixup 论文名称:mixup: BEYOND EMPIRICAL RISK MINIMIZATION 论文地址:https://arxiv.org/ab ...

  6. YOLOV4知识点分析(一)

    YOLOV4知识点分析(一) 简 介 yolov4论文:YOLOv4: Optimal Speed and Accuracy of Object Detection arxiv:https://arx ...

  7. 你需要掌握的有关.NET DateTime类型的知识点和坑位 都在这里

    引言    DateTime数据类型是一个复杂的问题,复杂到足以让你在编写[将日期从Web服务器返回到浏览器]简单代码时感到困惑. ASP.NET MVC 5和 Web API 2/ASP.NETCo ...

  8. 简练软考知识点整理-范围确认易混概念

    与确认范围容易混淆的知识点包括,确认范围与核实产品.质量控制.项目收尾,下面进行比较分析. (1)确认范围与核实产品 核实产品是针对产品是否完成,在项目(或阶段)结束时由发起人或客户来验证,强调产品是 ...

  9. 朴素贝叶斯知识点概括

    1. 简述 贝叶斯是典型的生成学习方法 对于给定的训练数据集,首先,基于特征条件独立假设,学习输入/输出的联合概率分布:然后,基于此模型,对于给定的输入x,根据贝叶斯定理求后验概率最大的输出y 术语说 ...

最新文章

  1. loadrunner另类玩法【测试帮日记公开课】
  2. 屏幕坐标系和视口坐标系
  3. php的wsgi框架结构,理解 WSGI 框架
  4. TCP/IP的分层负载
  5. 这些棘手的Java面试题,答案你都知道吗?
  6. 无线路由器在手机上如何连接服务器,192.168.10.1路由器手机怎么设置? | 192路由网...
  7. [转载] python中字符串编码形式及其所占字节
  8. ML Mastery 博客文章翻译(二)20220116 更新
  9. 【三边定位】 演示程序V0.1
  10. linux命令th,Linux 第13天 文本操作命令
  11. linux 文件隐藏权限,linux文件基本权限、默认权限、隐藏权限和ACL权限
  12. jQuery2.x源码解析(设计篇)
  13. 基于神经网络的图像识别
  14. 我的世界联机侠怎么删除java_我的世界联机侠怎么增加房间人数
  15. 【95】太空射击游戏——玩家代码
  16. HttpWatch(功能详细介绍)
  17. php加载COM组件失败原因及其解决方法
  18. MIT 6.824 lab3 KVRaft
  19. kNN_约会网站匹配效果改进实现代码
  20. CG cosh, exp, sinh, smoothstep, tanh, perlin_easeCurve1/2 曲线

热门文章

  1. 微信朋友圈“文字发”操作技巧,轻松实现不带图发布
  2. psnr用matlab读取一幅图像,matlab实现PSNR
  3. java中char类型_Java-char类型详解
  4. 如何用eclipse来创建软件
  5. error C2065: '_lpw ' : undeclared identifier
  6. 2BizBox ERP v4.0.5官方版
  7. Vue v-on指令
  8. 【微电网优化】基于matlab YALMIP求解微网(光伏+风电+蓄电池+微电网+柴油机)优化调度问题【含Matlab源码 2266期】
  9. 【优化运行】基于matlab高比例风电电力系统储能运行及配置分析【含Matlab源码 2273期】
  10. 重回魔都,焕新复用 | 经典款3系产品快速落地服务第三城