数论基础:模奇素数的二次剩余 (1)

注意:1. 本文讨论的是模奇素数的二次剩余

  1. 目前不打算写二次互反律,不易写明白

什么是二次剩余

数论基础:模奇素数的二次剩余 (1)_第1张图片

求解模小素数的二次同余方程

求解模小素数的二次方程,只需要遍历 Z p ∗ Zp* Zp 中的数,验证每个数的平方模p结果是否为a即可。

原因:在同余的意义下,只有 0 , 1 , 2 , . . . , p − 1 {0, 1, 2, ... , p-1} 0,1,2,...,p1这些数,而 x = 0 x=0 x=0 只可能是 x 2 ≡ 0   ( m o d   p ) x^2\equiv0\ (mod \ p) x20 (mod p) 的解。这个方程很普通,解永远是 x ≡ 0   ( m o d   p ) x\equiv0\ (mod\ p) x0 (mod p) ,我们不需要特别地去考虑它。

sage实现求解 x 2 ≡ a   ( m o d   7 ) x^2\equiv a\ (mod \ 7) x2a (mod 7) 的代码:

for a in range(1,7):
    print("Solving x^2 = {} mod 7".format(a))
    solNum = 0
    for x in range(1,7):
        if mod(x*x,7) == a:
            print("x =",x)
            solNum += 1
    if solNum == 0:
        print("No solution ...")
    else:
        print("Number of solution is {}".format(solNum))

二次剩余个数、解的结构

下图中指的是模奇素数二次方程的解的结构
数论基础:模奇素数的二次剩余 (1)_第2张图片

模p二次剩余的个数为什么是 p − 1 2 \frac{p-1}{2} 2p1

Z p ∗ Zp* Zp 中的所有数(即 1 , 2 , . . . , p − 1 {1, 2, ... , p-1 } 1,2,...,p1)平方后,出现了重复结果。且两个一对,两数同余。例如:

1 2 ≡ ( p − 1 ) 2 ≡ ( − 1 ) 2   ( m o d   p ) 1^2\equiv(p-1)^2\equiv(-1)^2\ (mod \ p) 12(p1)2(1)2 (mod p)
2 2 ≡ ( p − 2 ) 2 ≡ ( − 2 ) 2   ( m o d   p ) 2^2\equiv(p-2)^2\equiv(-2)^2\ (mod \ p) 22(p2)2(2)2 (mod p)

因此将 Z p ∗ Zp* Zp 中的元素平方后,元素的个数变成原来的一半

如何判断是否有解

数论基础:模奇素数的二次剩余 (1)_第3张图片
编程中,我们可以使用gmpy2的legendre()

参考资料:

Adleman-Manders-Miller Root Extraction Method Revisited

你可能感兴趣的:(#,数论知识和相关算法)