什么叫二次剩余,其实就是对于给定的 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算法学习小记
