二次剩余
二次剩余
定义
令整数 \(a,p\) 满足 \((a,p)=1\),若存在整数 \(x\) 使得 \(x^2\equiv a\pmod p\)
则称 \(a\) 为模 \(p\) 的二次剩余,否则称 \(a\) 为模 \(p\) 的二次非剩余,这里只讨论 \(p\) 为奇质数的情况。
Legendre 符号
对奇素数 \(p\) 和整数 \(a\),定义 Legendre 符号如下:
\( \left(\frac{a}{p}\right)=\begin{cases} 0, & p\mid a,\\ 1, & (p\nmid a) \land ((\exists x\in\mathbf{Z}),~~a\equiv x^2\pmod p),\\ -1, & \text{otherwise}.\\ \end{cases}\)
性质
| \(\left(\frac{n}{p}\right)\equiv n^{\frac{p-1}{2}}\pmod p\) | \(\left(\frac{1}{p}\right)=1\) |
| \(\left(\frac{-1}{p}\right)=(-1)^{\frac{p-1}{2}}\) | \(\left(\frac{2}{p}\right)=(-1)^{\frac{p^2-1}{8}}\) |
| \(\left(\frac{ab}{p}\right)=\left(\frac{a}{p}\right)\left(\frac{b}{p}\right)\) | \(\left(\frac{ab^2}{p}\right)=\left(\frac{a}{p}\right)\) |
| \(a\equiv b\pmod p\Rightarrow \left(\frac{a}{p}\right)=\left(\frac{b}{p}\right)\) |
Gauss 引理
设 \((n,p)=1\), 对整数 \(k\left(1\leq k\leq \dfrac{p-1}{2}\right)\) 令 \(r_k=nk\mod p\),\(m=\sum_{i=1}^{\frac{p-1}{2}}[r_k>\frac{p-1}{2}]\) 则 \(\left(\frac{n}{p}\right)=(-1)^m\)
证明
- 设 \(t_k=nk\mod p(1\le k \le \frac{p-1}{2})\),
- 易证 \(t_k\) 互不相同,将其分为两组 \(A=\{t_k|t_k<\frac{p}{2}\},B=\{t_k|t_k>\frac{p}{2}\}\)
- 设 \(C_i=p-B_i\),其中 \(m=size(C)\),尝试证明 \(B\) 和 \(C\) 中元素互不相同
- 显然 \(A\) 与 \(C\) 中的所有数恰好组成了 \(1\) 到 \(\frac{p-1}{2}\) 中的所有数
- 若 \(i\not= j\),\(t_i=\pm t_j\),则 \(ni\equiv \pm nj\),显然 \(i\not=p-j\),矛盾,所以元素互不相同
- \(n^{\frac{p-1}{2}}\prod_{i=1}^{\frac{p-1}{2}}i\equiv\prod_{i=1}^{\frac{p-1}{2}}t_i\equiv (-1)^{m}\prod A_i\prod C_i\equiv(-1)^m\prod_{i=1}^{\frac{p-1}{2}}i\),即 \(\left(\frac{n}{p}\right)\equiv n^{\frac{p-1}{2}}\equiv (-1)^m\)
二次互反律
设 \(p,q\) 是两个不同的奇素数 \(\left(\frac{p}{q}\right)\left(\frac{q}{p}\right)=(-1)^{\frac{p-1}{2}\frac{q-1}{2}}\)
证明
- 尝试按照 Gauss 引理 的思路研究 \(\left(\frac{p}{q}\right)\)
- 可设 \(t_a=aq\mod p\),\(aq=p\lfloor\frac{aq}{p}\rfloor+t_a\),有等式 \(q\sum a=p\sum \lfloor\frac{aq}{p}\rfloor+\sum t_a\)
- \(A=\{t_a|t_a<\frac{p}{2}\},B=\{t_a|t_a>\frac{p}{2}\}\),\(C_i=p-B_i\),\(m=size(C)\),\(T=\sum \lfloor\frac{aq}{p}\rfloor\)
- 易得 \(\sum j=\sum A+\sum C=\sum A+np-\sum B\),即 \(\sum a=\sum t_a+np-2\sum B\)
- 把 (4.) 代入 (2.) 有 \((q-1)\sum a=p(T-n)+2\sum B\) 化简 \(\frac{p^2-1}{8}(q-1)=p(T-n)+2\sum B\)
- 因为 \(p>2\),所以 \(p^2-1=4t(t+1)\),即 \(8\mid p^2+1\),由 (5.) 易知 \(n\equiv T\pmod 2\),\(\left(\frac{p}{q}\right)=(-1)^T\)
- 将 \(\frac{p}{q}\) 看成斜率,那么把坐标系中 \(T\) 表达出来一切事情就清晰了
- 其实相当于算矩形面积,于是 \(\left(\frac{p}{q}\right)\left(\frac{q}{p}\right)=(-1)^{\frac{p-1}{2}\frac{q-1}{2}}\)
Cipolla 算法
求 \(a^2\equiv n\pmod p\),设 \(i^2\equiv a^2-n\pmod p\),其中一个解为 \((a+i)^{\frac{p+1}{2}}\),另一个解为他的相反数
证明
- \((a+i)^{p+1}\equiv (a+i)(a+i)^p\equiv (a+i)(a^p+i^p)\) 由二项式定理,其中组合数只有 \(C_p^0,C_p^p\) 有意义
- 由 \(i^{p-1}\equiv (a^2-n)^{p-1}\equiv -1\) 有 \((a+i)(a^p+i^p)\equiv (a+i)(a-i)\equiv a^2-i^2\equiv a^2-(a^2-n)\equiv n\)
- 自然 \((a+i)^{\frac{p+1}{2}}\) 是 \(sqrt(n)\) 的一个解
实现
typedef long long var;
var n,mod,I;
struct num{var x,y;num(var _x=0,var _y=0):x(_x),y(_y){}};
num operator* (num a,num b)
{
return {(a.x*b.x+a.y*b.y%mod*I)%mod,(a.x*b.y+b.x*a.y)%mod};
}
num ksm(num a,int b)
{
num ans=1;
while(b)
{
if(b&1)ans=ans*a;
a=a*a;b>>=1;
}
return ans;
}
var cipolla()
{
var a=rand()+1;
while(ksm(I=(a*a-n)%mod,mod-1>>1).x==1)a=rand()+1;
return ksm({a,1},mod+1>>1).x;
}
void work()
{
cin>>n>>mod;
if(!n)return cout<<0<<'\n',void();
var x0=(cipolla()+mod)%mod,x1=mod-x0;
if(x1<x0)swap(x0,x1);
if(x0*x0%mod!=n)cout<<"Hola!"<<'\n';
else if(x0==x1)cout<<x0<<'\n';
else cout<<x0<<" "<<x1<<'\n';
}
int main()
{
int T;cin>>T;
while(T--)work();
return 0;
}

浙公网安备 33010602011771号