本来不想学这东西,但是发现学了就能水两个多项式板子,那还是学吧。
1 二次剩余是什么
[x^2equiv npmod p
]
其中 (p) 为奇质数。
你发现这玩意很像模意义的开根,事实上就是。
如果方程存在一个解,(n) 就是模 (p) 意义下的二次剩余,反之是非二次剩余。
2 解的数量
假设存在多个解。
[x_0^2equiv x_1^2pmod p
]
[x_0^2-x_1^2equiv 0pmod p
]
[(x_0-x_1)(x_0+x_1)equiv 0pmod p
]
[ecause x_0
otequiv x_1pmod p
]
[ herefore x_0+x_1equiv0pmod p
]
因此我们证明了如果存在解,必定存在恰好两个解。
3 判断是否是二次剩余
假设 (0<n<p)。
[n^{p-1}equiv 1pmod p
]
[(n^frac{p-1}{2})^2equiv1pmod p
]
因此 (n^frac{p-1}{2}equivpm1pmod p)
结论:取 (1) 的时候是二次剩余,取 (-1) 的时候不是。
证明先鸽着。
4 求解二次剩余
我们使用 Cipolla 算法。
首先,我们随便找一个数 (a),让 (a) 不是模 (p) 意义下的二次剩余。
定义 (omega) 为一个虚数,使得 (omega^2=a^2-n)。
那么一个解就是 ((a+omega)^frac{p+1}{2})。