[笔记] 二次剩余
欧拉准则
对于奇素数 \(p\) 和 \(p\nmid a\) 有
\[a^{\frac{p-1}{2}}
\equiv\begin{cases}
1\pmod p,&x^2\equiv a\pmod p\text{ 有解}\\
-1\pmod p,&x^2\equiv a\pmod p\text{ 无解}
\end{cases}
\]
Cipolla 算法
- 找到一个 \(a\) 满足 \(a^2-n\) 是非二次剩余。
- 令 \(i^2=a^2-n\),则 \((a+i)^{p+1}=n\),故两个解分别为 \((a+i)^{\frac{p+1}{2}}\) 和其相反数。
int n, mod, I_2;
struct Cpx{
int x, y;
inline Cpx operator * (Cpx z){
return (Cpx){
Mod((LL) x * z.x % mod + (LL) I_2 * y % mod * z.y % mod - mod),
Mod((LL) x * z.y % mod + (LL) y * z.x % mod - mod)};
}
};
void solve(){
int a, res, x0, x1;
do a = rand() % mod, res = Mod((LL)a * a % mod - n);
while(!a || qpow(res, mod - 1 >> 1) == 1);
I_2 = res;
x0 = qpow({a, 1}, mod + 1 >> 1).x;
x1 = mod - x0;
}