class="markdown_views prism-dracula">
前言
在有些时候,我们会需要求解这样的问题
x2≡a(modp)
给定
a求是否有
x满足这个式子,若有r则称
a是模p的二次剩余
若没有满足条件的
x,则称
a是模p的非二次剩余
然而在一些题目中,我们既要判定它是否是模p的二次剩余,也要判断其值,本文就对此进行一些探究
对于所有模数
二次剩余数量
我们发现
a2≡(p−a)2(modp)
所以满足条件的二次剩余数量不可能超过
⌊2n⌋+1
不同模数下的二次剩余
模数为偶质数
显然偶质数只有一个,那就是2
显然
0和
1都是
2的二次剩余
模数为奇质数
对于判定模数为奇素数时的情况
我们定义勒让德符号:
(pa)=⎩⎪⎨⎪⎧+1−10如果a̸≡0(modp)且有整数x满足x2≡a(modp)如果没有整数x满足x2≡a(modp)如果a≡0(modp)
我们先引入
欧拉准则
这是一个用来判定的经典准则(其实勒让德符号的定义准确来说就是从这里定义的)
这里规定,当模数为奇素数的时候···(此处省略解释)
直接代入勒让德符号成为
(pa)=a2p−1(modp)
口糊一下证明
由于模数是奇素数,所以我们就可以使用拉格朗日定理(k次多项式至多k个根)
所以对于任意一个a,满足x2≡a(modp)的x数量至多为2
现在我们把a=0的情况扔掉,因为a=0显然满足上式
只考虑a̸=0的情况
首先我们有费马小定理ap−1≡1(modp)
由于p是奇数,我们开始推式子
移项得
ap−1−1≡0(modp)
因式分解得
(a2p−1−1)(a2p−1+1)≡0(modp)
我们发现,如果有x满足x2≡a(modp),那么根据费马小定理xp−1≡1(modp)
将x用a代替
a2p−1≡1(modp)
如果没有满足条件的x,这说明
a2p−1̸≡1(modp)
则根据上面的方程,两项中至少有一项为0
则a2p−1≡−1(modp)
证毕
现在我们已经会如何判定了,然而OI中更多的是要求这个值(大雾)
假设我们现在已经判定完了,发现
a是模
p的二次剩余
我们现在要求
x2≡a(modp)
移项得
a−1x2≡1(modp)
设
xi