Cipolla 二次剩余算法和简要证明

二次剩余的判定

在模奇素数 \(p\) 意义下:

\[a^{\frac{p-1}{2}} = \begin{cases} 1, &a \text{是二次剩余}\\ -1, &a \text{不是二次剩余} \end{cases} \]

\(1\dots p-1\) 这些数中,恰好有二分之一(\(\frac{p-1}{2}\) 个)是二次剩余,二分之一不是。

一个同余式

在模奇素数 \(p\) 意义下:

\[\begin{aligned} (a+b)^p &= a^p+\binom{p}{1}a^{p-1}b+\dots+\binom{p}{p-1}ab^{p-1} + b^p\\ &= a^p+b^p \end{aligned} \]

这是因为对于奇素数 \(p\)\(i\in[1, p-1]\)\(p\mid\binom{p}{i}\)

Cipolla 算法

断言对于奇素数 \(p\)\((a,p) = 1\),方程 \(x^2\equiv a\pmod p\) 的一个解可以用如下方式寻找:找到 \(r\) 使得 \(r^2-a\) 为二次非剩余,扩域令 \(j^2 = r^2-a\),则 \(x \equiv (a+j)^\frac{p+1}{2} \pmod {p}\)。注意到这还表明 \((a+j)^\frac{p+1}{2}\) 虚部为 \(0\)。证明如下。

\[\begin{aligned} x^2 &\equiv (r+j)^p(r+j) \pmod p\\ &\equiv (r^p+j^p)(r+j) \pmod p\\ &\equiv (r+(j^2)^{\frac{p-1}{2}}\cdot j)(r+j) \pmod p\\ &\equiv (r+(r^2-a)^{\frac{p-1}{2}}\cdot j)(r+j) \pmod p\\ &\equiv (r-j)(r+j) \pmod p\\ &\equiv r^2-j^2 \pmod p\\ &\equiv r^2-(r^2-a) \pmod p\\ &\equiv a \pmod p\\ \end{aligned} \]

通过随机化寻找 \(r\),期望 \(\Theta(1)\) 次即可找到。时间复杂度为快速幂的复杂度,即一般的 \(\Theta(\log p)\)

posted @ 2024-02-21 16:16  kyEEcccccc  阅读(39)  评论(0编辑  收藏  举报