什么叫二次剩余,其实就是对于给定的p(p∈P)和n,如果有x满足x2≡n(modp),那么n在模p意义下就是二次剩余。其实就是模意义下能否开根号。
我们先定义Fp,这是一个数域,其实就是0到p−1这p个数与模p意义下加减乘除运算构成的集合。
定理1:对于x2≡n(modp),总共有p−12个的n能使该方程有解(将n=0情况除去,由于该情况显然有x=0)。
证明:我们只用考虑所有x2。如果存在不同的两个数u、v,它们的平方在模p意义下同余,那么显然有p|(u2−v2)。由平方差公式p|(u+v)(u−v)。显然p不可能整除u−v,因此p整除u+v,因此u+v≡0(modp)。这个结论反过来也是成立的,因此共有p−12种互不相同的平方,显然对应了所有有解的n,而且同一个n还一定存在两个互为相反数的解。
Description:
求解x2≡n(modp)。p
Solution:
由费马小定理:
np−1≡1(modp)
所以:
np−12≡±1(modp)
由欧拉准则:
(np)≡np−12(modp)
其中:
(np)为勒让德符号。
因为x≡n12(modp),所以有xp−1≡np−12≡1(modp)。即:
(np)=⎧⎩⎨⎪⎪1−10n在模p意义下是二次剩余n在模p意义下不是二次剩余n≡0(modp)
设:
k=a2−n,ω=k√
则该方程的解为:
x≡(a+ω)p+12(modp)
证明:若k是该模意义下的非二次剩余,
则:
wp−1=np−12=−1。
同时:
(a+b)p≡ap+bp(modp)
则:
x21≡≡≡≡≡≡≡≡(a+ω)p+1(a+ω)p(a+ω)(ap+ωp)(a+ω)(ap−1a+ωp−1ω)(a+ω)(a−ω)(a+ω)a2−ω2a2−(a2−n)n(modp)
另一解为:
x2≡−x1(modp)
如何找到这个k<script type="math/tex" id="MathJax-Element-141">k</script>呢。因为非二次剩余的个数大约有一半,随机几次即可。
话不多说,可以参考资料:
ACdreamer 二次同余方程的解
二次剩余Cipolla算法学习小记