## 二次剩余
> 这东西挺有意思的。
### 问题
> 给定 $n,p$,求方程 $x^2\equiv N \bmod p$ 的解。
>
> 保证 $p$ 是奇素数。
#### 1. 判断一个 $N$ 是否是二次剩余(方程解的个数)
根据费马小定理,对于任意非 $0$ 整数 $x$ 都有 $x^{p-1}\equiv 1\bmod p$。
则 $x^{p-1}\equiv x^{2{\frac{p-1}{2}}}\equiv N^{\frac{p-1}{2}}\equiv 1\bmod p$。
所以 $N$ 为二次剩余的必要条件为为 $N^{\frac{p-1}{2}}\equiv 1\bmod p$。
实际上这个条件是充要的:
已知 $N^{\frac{p-1}{2}}\equiv 1\bmod p$。设原根为 $g$,$N\equiv g^{k}\bmod p$,那么有 $g^{k\frac{p-1}{2}}\equiv 1$,即 $p-1|k\frac{p-1}{2}$。
这说明 $k$ 一定是偶数,那么 $x$ 取 $g^{\frac{k}{2}}$ 就是一个合法解。
- 注意到如果 $N$ 是非二次剩余,那么 $N^{\frac{p-1}{2}}$ 只可能等于 $-1$,因为 $N^{p-1}\equiv 1\bmod p$ 始终成立。
所以当 $N^{\frac{p-1}{2}}\equiv -1\bmod p$ 是方程无解。
否则已知 $x_1=g^{\frac{k}{2}}$ 一定是一个解。
假设方程有多个解,对于其中的两个解 $(x_{1},x_{2})$,有 $x_{1}^2-x_{2}^{2}\equiv 0\bmod p$。
由此可以推出 $(x_{1}+x_{2})(x_{1}-x_{2})\equiv 0\bmod p$。
因为 $x_{1}\neq x_{2}$,所以 $x_{1}+x_{2}\equiv 0$。
**故方程恰好为两个解,一个为 $g^{\frac{k}{2}}$,另一个为 $-g^{\frac{k}{2}}\bmod p$**。
#### 2.求解方程的解 (Cipolla 算法)
考虑先找到一个 $a$ 满足 $a^2-n$ 是非二次剩余。
注意到二次剩余的数量和非二次剩余的数量都是 $\frac{p-1}{2}$(不考虑 $0$),所以期望随机两次就可以找出来。
然后我们需要一个 $c$ 满足 $c^2\equiv a^2-n\bmod p$。但 $a^2-n$ 是非二次剩余,显然在 $[1,p-1]$ 内不存在这样的 $c$。所以考虑拓展到复数域。(注意我们在形式上始终把 $c$ 当做一个整体)
- 定理 $1$:$c^{p}=-c$。
> $c^{p}\equiv c\times c^{2\frac{p-1}{2}}\equiv c\times (a^{2}-n)^{2\frac{p-1}{2}}\equiv -c\bmod p$。
- 定理 $2$:$(A+B)^{p}\equiv A^p+B^p\bmod p$。
> 二项式展开 $(A+B)^{p}\equiv \sum_{i=0}^{p}{p\choose i} A^{i}B^{p-i}\equiv A^{p}+B^{p}\bmod p$。
>
> 因为当 $i\neq0,p$ 时 $p$ 因子必定存在。
结合这两个就可以推出 $(a+c)^{p+1}\equiv (a+c)(a^{p}+c^{p})\equiv (a+c)(a-c)\equiv a^2-c^2\equiv n\bmod p$。
所以 $(a+c)^{\frac{p+1}{2}}$ 就是 $x$ 的解。
那么问题来了,$x$ 如果有虚部不就寄了吗?
不过可以证明 $x$ 一定无虚部。
> 考虑 $(a+c)^{\frac{p+1}{2}}$ 如果是一个复数,记为 $(A+Bc),B\neq 0$。
>
> 那么有 $(A+Bc)^2\equiv n\bmod p$,
>
> 即 $A^2+2ABc-(a^2-n)B^2\equiv n\bmod p$。
>
> 移项可得 $2ABi\equiv n+(a^2-n)B^2-A^2\bmod p$。
>
> 等式右边没有虚部,所以左边也没有,即 $AB\equiv 0$,所以 $A=0$。
>
> 那么就是说 $(Bi)^2\equiv n$,即 $(a^2-n)\equiv nB^{-2}\bmod p$。
>
> 左边是非二次剩余,右边是二次剩余,显然矛盾了。
快速幂求解即可。