模数为奇素数的二次同余方程
作者:互联网
模数为奇素数的二次同余方程
求解二次同余方程\(x^2 \equiv n \pmod p\)(\(p\)为奇素数)
要求二次同余方程组,就必须先判断方程是否有解,这一部分我懒得写,在此略去。而当\(n=0\)显然只有\(x \equiv 0\)一个解。下面讨论\(n \not \equiv 0\) 的情况。
此时这个方程有且仅有两个解。证明如下:
若\(x \equiv x_1\)是方程的一个解,则\(x \equiv -x_1\)同样是方程的解,因此只需证明不存在更多解。设方程的两个解分别为\(x \equiv x_1\)和\(x \equiv x_2\),则\(n \equiv x_1 ^ 2 \equiv x_2 ^ 2\)。移项并因式分解可得
\[(x_1 + x_2)(x_1 - x_2) \equiv 0 \pmod p \]我们分析这个式子,由于\(x_1 \not \equiv x_2\),所以\(x_1 - x_2 \not \equiv 0\),所以\(x_1 + x_2 \equiv 0\),即方程的解在模\(p\)意义下互为相反数,故方程有且仅有两个解。
Cipolla算法
为了求解模数为奇素数时的二次同余方程,我们引入\(\text{Cipolla}\)算法。
对于方程\(x^2 \equiv n \pmod p\) 我们先找到一个\(a\),使得\(a^2 - n\)是模\(p\)的二次非剩余,然后扩域,设\(i^2 \equiv a^2 - n\),此时\((a + i)^{\frac{p + 1}{2}}\)即为我们要求的\(x\)。
为什么?
注意到$$a^2 - i^2 \equiv (a + i)(a - i) \equiv n \pmod p$$
那么我们需要证明的就是$$(a + i)^{p + 1} \equiv (a + i)(a - i)$$
下面给出两个引理
\(\text{Lemma 1}\) $$i^p\equiv -i$$
这是因为
\[i^p \equiv i(i^{2})^{\frac{p - 1}{2}} \]而\(i^2\)是模\(p\)的二次非剩余,所以
\[(i^2)^{\frac{p-1}{2}} \equiv -1 \]代入上式即可
\(\text{Lemma 2}\)
对于模\(p\)意义下的任意整数\(x,y\),我们有$$(x+y)^p \equiv x ^ p + y ^ p$$
这是因为由二项式定理$$(x+y)^p \equiv \sum_{k=0}^p \binom{p}{k} x^k y^{p-k} \equiv x ^ p+y ^ p$$
现在考虑之前提出的式子
\[\begin{align*} (a + i)^{p + 1} &\equiv (a + i)(a+i)^p \\ &\equiv (a+i)(a^p+i^p) \\ &\equiv (a+i)(a-i) \end{align*} \]得证
具体只要实现一个复数类就行了
标签:方程,二次,pmod,为奇,模数,同余,equiv 来源: https://www.cnblogs.com/DCH233/p/16478234.html