二次剩余 Cipolla's algorithm
定义
当存在某个 $x$,式子 $x^2\equiv a\pmod p$ 成立时,称“$a$ 是模 $p$ 的二次剩余(Quadratic residue)”
Cipolla’s algorithm
只考虑 $p$ 是奇质数的情况
二次剩余的数量
在 $[0,p)$ 中是 $\frac{p+1}{2}$,包括 $0$
证明
考虑两个不同的数 $x,y$,若 $x^2\equiv y^2\pmod p$,那么 $p\mid(x^2-y^2)$,即 $p\mid(x-y)(x+y)$,显然 $p\nmid(x-y)$,于是$p\mid(x+y)$
于是 $x+y\equiv 0 \pmod p$
所以除了 $0$ 以外的数恰好两两匹配
Legendre symbol
$$
\left(\frac{a}{p}\right)=
\begin{cases}
1,& \text{$a$ 是模 $p$ 的二次剩余} \
-1,& \text{$a$ 不是模 $p$ 的二次剩余} \
0,& a\equiv0 \pmod p
\end{cases}
$$
Euler’s criterion
若 $p$是奇质数且 $p$ 不能整除 $d$,则:
$d$ 是模 $p$ 的二次剩余当且仅当:
$$d^{\frac {p-1}{2}}\equiv 1{\pmod {p}}$$
$d$ 是模 $p$ 的非二次剩余当且仅当:
$$d^{\frac {p-1}{2}}\equiv -1{\pmod {p}}$$
以勒让德符号表示,即为:
$$d^{\frac {p-1}{2}}\equiv \left({\frac {d}{p}}\right){\pmod {p}}$$
证明
参考这里
算法过程
我们需要求满足 $x^2\equiv a\pmod p$ 的一个 $x$
现在我们可以 $\mathcal O(\log p)$ 地判断一个数是否是模 $p$ 的二次剩余
1.
随机一个$t$,满足 $t^2-a$ 是非二次剩余,根据前面二次剩余的分布,期望次数很小..
2.
令 $\omega=\sqrt{t^2-a}$
需要求的$x=(t+\omega)^{\frac{p+1}{2}}$
这里存两个系数 $a+b\omega$ 就可以快速幂了
证明
定理1
$$(a+b)^p\equiv a^p+b^p \pmod{p} \tag{1}$$
证明
$$
(a+b)^p=\sum_{i=0}^p\binom{p}{i}a^ib^{p-i}
$$
当 $i\ne 0$ 且 $i\ne p$,$\binom{p}{i}\equiv 0 \pmod{p}$
定理2
$$\omega^p\equiv-\omega \pmod{p} \tag{2}$$
证明
因为$t^2-a$是非二次剩余,所以
$$\omega^{p-1}=(\omega^2)^{\frac{p-1}{2}}=(t^2-a)^{\frac{p-1}{2}}\equiv-1 \pmod{p}$$
定理3
$$(a+\omega)^p\equiv a-\omega \pmod{p} \tag{3}$$
由(1),(2)显然
结论
$$
\begin{align}
x^2&=(t+\omega)^{p+1} \
&=(t+\omega)(t+\omega)^p \
&\equiv (t+\omega)(t-\omega) \pmod{p}\
&=t^2-\omega^2 \
&=t^2-(t^2-a) \
&=a
\end{align}
$$
$\omega$前的系数
根据Lagrange’s theorem我们知道 $x^2-a=0$ 在任何域中都有两个根,并且我们前面得到了这两个根都在模 $p$ 的剩余系中,所以没有$\omega$
代码
这里会返回一个较小的根
1 | inline int Pow(ll x, int y=P-2){ |
启示
没有
二次剩余 Cipolla's algorithm