【模板】【证明】任意模数下的二次剩余求解

什么是二次剩余问题

就是求解形如 x 2 ≡ a   ( m o d   p ) x^2\equiv a \text{ } ( mod\text{ }p ) x2a (mod p)
的关于 x x x的方程。

下面从不同的模数开始分类讨论解决二次剩余问题的方法

几个定义

如果关于 x x x的方程
x 2 ≡ a   ( m o d   p ) x^2\equiv a \text{ } ( mod\text{ }p ) x2a (mod p)有解。

a a a是模 p p p意义下的二次剩余,否则称为模 p p p意义下的二次非剩余。

为什么会出现二次非剩余,其实很简单。

考虑在 % p \%p %p意义下本质不同的数只会有 p p p个。而其中 ( − t ) 2 ≡ t 2 ( m o d   p ) (-t)^2\equiv t^2(mod\text{ }p) (t)2t2(mod p),根据抽屉原理,总会有至少 O ( p 2 ) O(\frac{p}{2}) O(2p)的数无法被 t 2 % p 表 示 出 来 t^2\%p表示出来 t2%p

勒让德符号( L e g e n d r e   s y m b o l Legendre\text{ }symbol Legendre symbol):
( a p ) = { 1 a 是 % p 下 的 二 次 剩 余 − 1 a 是 % p 下 的 二 次 非 剩 余 0 a ≡ 0 ( m o d   p ) (\frac{a}{p})=\left\{ \begin{aligned} 1 &&&a是\%p下的二次剩余 \\ -1 &&&a是\%p下的二次非剩余 \\ 0 &&& a\equiv0(mod\text{ }p) \end{aligned} \right. (pa)=110a%pa%pa0(mod p)

稍后会告诉怎么求勒让德符号。

1.模数为奇质数

首先来考虑 p p p是奇质数的情况。


解的存在性问题

欧拉准则:

欧拉准则: ( a p ) ≡ a p − 1 2 ( m o d   p ) (\frac{a}{p})\equiv a^{\frac{p-1}{2}}(mod\text{ }p) (pa)a2p1(mod p)

p ∣ a p \mid a pa的时候欧拉准则显然成立。

否则由费马小定理我们有 a p − 1 ≡ 1 ( m o d   p ) a^{p-1}\equiv 1(mod\text{ }p) ap11mod p)

所以必然有 a p − 1 2 ≡ ± 1 ( m o d   p ) a^{\frac{p-1}{2}}\equiv \pm1(mod\text{ }p) a2p1±1(mod p)

先证明 ( a p ) = 1 (\frac{a}{p})=1 (pa)=1的情况

必要性:

a a a % p \%p %p意义下的二次剩余,即 ∃ x , x 2 ≡ a ( m o d   p ) \exist x,x^2\equiv a(mod\text{ }p) x,x2a(mod p)

那么我们有 a p − 1 2 ≡ ( x 2 ) p − 1 2 ≡ x p − 1 ≡ 1 ( m o d   p ) a^{\frac{p-1}2}\equiv (x^2)^{\frac{p-1}2}\equiv x^{p-1}\equiv 1(mod\text{ }p) a2p1(x2)2p1xp11(mod p)

必要性证明完毕

充分性:

p p p有一个原根 g g g,那么必然有 g i ≡ a ( m o d   p ) g^i\equiv a(mod\text{ }p) gia(mod p)

则: g i ( p − 1 ) 2 ≡ 1 ( m o d   p ) g^{\frac{i(p-1)}2}\equiv 1(mod\text{ }p) g2i(p1)1(mod p)

由于 g g g为原根,所以必然会有 ( p − 1 ) ∣ i ( p − 1 ) 2 (p-1)\mid\frac{i(p-1)}{2} (p1)2i(p1)

i i i是偶数。

必然存在解 x 0 ≡ g i 2 ( m o d   p ) x_0\equiv g^{\frac{i}2}(mod\text{ }p) x0g2i(mod p)

充分性证毕。

那么 ( a p ) ≡ − 1 ( m o d   p ) (\frac{a}p)\equiv-1(mod\text{ }p) (pa)1(mod p)的情况也就十分显然了。

首先由费马小定理 a p − 1 2 ≡ ± 1 ( m o d   p ) a^{\frac{p-1}{2}}\equiv \pm 1(mod\text{ }p) a2p1±1(mod p)

由于前面的欧拉准则在 ( a p ) = 1 (\frac{a}{p})=1 (pa)=1的必要性,二次非剩余的情况下 x 2 ≡ a p − 1 ≡ − 1 ( m o d   p ) x^2\equiv a^{p-1}\equiv -1(mod\text{ }p) x2ap11(mod p),显然不可能,违反了费马小定理。


求解:

O ( log ⁡ 2 p ) O(\log^2 p) O(log2p)解法:

首先求出 p − 1 = 2 t s p-1=2^ts p1=2ts 2 ∤ s 2\nmid s 2s

那么我们要求 x 2 ≡ a ( m o d   p ) x^2\equiv a(mod\text{ }{p}) x2a(mod p)

a − 1 x 2 ≡ 1 ( m o d   p ) a^{-1}x^2\equiv 1(mod\text{ }p) a1x21(mod p)

由欧拉准则 a p − 1 2 ≡ a 2 t − 1 s ≡ 1 ( m o d   p ) a^{\frac{p-1}2}\equiv a^{2^{t-1}s}\equiv 1(mod\text{ }p) a2p1a2t1s1(mod p)

x i x_i xi表示方程 ( a − 1 x i 2 ) 2 i ≡ 1 ( m o d   p ) 的 根 (a^{-1}x_i^{2})^{2^{i}}\equiv 1(mod\text{ }p)的根 (a1xi2)2i1(mod p)

显然现在有 x t − 1 = a s + 1 2 x_{t-1}=a^{\frac{s+1}2} xt1=a2s+1,我们要求的就是 x 0 x_0 x0

考虑如何从 x q x_q xq计算出 x q − 1 x_{q-1} xq1

设: ϵ q = a − 1 x q 2 \epsilon_q=a^{-1}x_q^2 ϵq=a1xq2

由定义可以得到 ϵ q 2 q ≡ 1 ( m o d   p ) \epsilon_q^{2^q}\equiv 1(mod\text{ }p) ϵq2q1(mod p)

则: ϵ q 2 q − 1 ≡ ± 1 ( m o d   p ) \epsilon_q^{2^{q-1}}\equiv \pm1(mod\text{ }p) ϵq2q1±1(mod p)

如果为 1 1 1,直接令 ϵ q − 1 = ϵ q , x q − 1 = x q \epsilon_{q-1}=\epsilon_q,x_{q-1}=x_q ϵq1=ϵq,xq1=xq即可。

否则设 λ x q ≡ x q − 1 ( m o d   p ) \lambda x_q\equiv x_{q-1}(mod\text{ }p) λxqxq1(mod p)

显然有 ϵ q − 1 2 q − 1 ≡ ( a − 1 x q 2 λ 2 ) 2 q − 1 ( m o d   p ) \epsilon_{q-1}^{2^{q-1}}\equiv (a^{-1}x_q^2\lambda^2)^{2^{q-1}}(mod \text{ }p) ϵq12q1(a1xq2λ2)2q1(mod p)

则: λ 2 q ≡ − 1 ( m o d   p ) \lambda^{2^q}\equiv-1(mod\text{ }p) λ2q1(mod p)

找到 % p \%p %p意义下的任意一个二次非剩余 w w w,根据欧拉准则我们有 w p − 1 2 ≡ w 2 t − 1 s ≡ − 1 ( m o d   p ) w^{\frac{p-1}2}\equiv w^{2^{t-1}s}\equiv -1(mod\text{ }p) w2p1w2t1s1(mod p)

λ ≡ w 2 t − 1 − q s ( m o d   p ) \lambda\equiv w^{2^{t-1-q}s}(mod\text{ }p) λw2t1qs(mod p)即可得到下一组解。

在这一部分的最后,会讲解如何寻找 % p \%p %p意义下的二次非剩余


O ( log ⁡ p ) O(\log p) O(logp)解法

这个解法由剑桥的Roberto Cipolla教授提出(好像就只是为了求解奇质数情况),故得名 C i p o l l a Cipolla Cipolla算法。

还是求解方程 x 2 ≡ a ( m o d   p ) x^2\equiv a(mod\text{ }p) x2a(mod p)

以下所有运算均在 % p \%p %p意义下进行

b 2 − a ≡ w ( m o d   p ) b^2-a\equiv w(mod\text{ }p) b2aw(mod p),其中 w w w % p \%p %p意义下的二次非剩余

由于 w w w % p \%p %p意义下不存在平方根,类似于虚数设 i = w i=\sqrt w i=w 。类似于复数重新定义 % p \%p %p意义下一个数为 ( a , b ) (a,b) (a,b),即 a + b w a+b\sqrt w a+bw

接下来定义一个代数系统 < G , + , × > <G,+,×>满足: ( a , b ) + ( c , d ) = ( a + c , b + d ) (a,b)+(c,d)=(a+c,b+d) (a,b)+(c,d)=(a+c,b+d) ( a , b ) × ( c , d ) = ( a c + b d w , a d + b c ) (a,b)\times (c,d)= (a c+b d w,a d+b c) (a,b)×(c,d)=(ac+bdw,ad+bc)

显然 G G G是一个环,不知道什么是环的自行百度,百度百科

既然有结合律了。就可以快速幂。

那么有结论:上述方程的解为 x = ( b + i ) p + 1 2 x=(b+i)^{\frac{p+1}2} x=(b+i)2p+1

证明如下: x 2 = ( b + i ) p + 1 = ( b + i ) p ( b + i ) \begin{aligned} x^2 &=(b+i)^{p+1} \\ &=(b+i)^p(b+i) \end{aligned} x2=(b+i)p+1=(b+i)p(b+i)

其中,由二项式定理 ( b + i ) p = ∑ k = 0 p C p k b k i p − k (b+i)^p=\sum_{k=0}^pC_p^kb^ki^{p-k} (b+i)p=k=0pCpkbkipk

显然当 k ≠ 0  or  p k\not= 0\text{ or }p k=0 or p C p k ≡ 0 ( m o d   p ) C_p^k\equiv 0(mod\text{ }p) Cpk0(mod p)

所以有 ( b + i ) p ≡ b p + i p ≡ b p − 1 b + w p − 1 2 i ≡ b − i ( m o d   p ) (b+i)^p\equiv b^p+i^p \equiv b^{p-1}b+w^{\frac{p-1}2}i\equiv b-i(mod\text{ }p) (b+i)pbp+ipbp1b+w2p1ibi(mod p)

这个式子的推出同时用到了费马小定理和二次非剩余的特殊性质。

所以可以推出: x 2 ≡ ( b − i ) ( b + i ) ≡ b 2 − w ≡ a ( m o d   p ) x^2\equiv (b-i)(b+i)\equiv b^2-w\equiv a(mod\text{ }p) x2(bi)(b+i)b2wa(mod p)

于是我们就得到了一个优秀的 O ( log ⁡ p ) O(\log p) O(logp)的求解奇质数二次剩余的方法了。


寻找二次非剩余:

由于前文已经叙述了,由于有 t 2 ≡ ( − t ) 2 ( m o d   p ) t^2\equiv (-t)^2(mod\text{ }p) t2(t)2(mod p),所以二次剩余的数量不会超过 O ( p 2 ) O(\frac{p}2) O(2p),我们随机出来一个数就有将近 1 / 2 1/2 1/2的概率是二次非剩余,所以这个直接用随机的做法就行了。

参考题目:Timus1132

2.模数为 p k p^k pk,其中 p p p是奇质数

首先仍然要判断解是否存在


解的存在性

进行解的存在性判断稍微麻烦了一些

设: a = p c m a=p^cm a=pcm p ∤ m p\nmid m pm

c ≥ k c\ge k ck,免谈,直接返回0。

c < k c < k c<k,有解多了一个前提条件: c % 2 = 0 c\%2=0 c%2=0

必要性证明:

设: x 0 2 ≡ a ( m o d   p k ) x_0^2\equiv a(mod\text{ }p^k) x02a(mod pk)
x 0 = p t n , n % p ≠ 0 x_0=p^tn,n\%p\not=0 x0=ptn,n%p=0

所以 x 0 2 = p 2 t n 2 x_0^2=p^{2t}n^2 x02=p2tn2

2 t < k 2t < k 2t<k,有如下推论: ( p 2 t s )   %   p k = p 2 t ( s   %   p k − 2 t ) (p^{2t}s)\text{ }\%\text{ }p^k=p^{2t}(s\text{ }\%\text{ }p^{k-2t}) (p2ts) % pk=p2t(s % pk2t)

所以 p 2 t ∣ a p^{2t}|a p2ta,同时我们也可以这样将原方程化为 x 0 2 ≡ a / p c ( m o d p k − c ) x_0^2\equiv a/p^c (mod p^{k-c}) x02a/pc(modpkc)

当新方程有解时,原方程也有解,将上面欧拉定则里面推理用的 p − 1 p-1 p1换成 ϕ ( p k − c ) \phi(p^{k-c}) ϕ(pkc)就行了。

最后解为 x = x 0 × p c 2 x=x_0\times p^{\frac{c}2} x=x0×p2c

所以接下来只讨论 p ∤ a p\nmid a pa的情况。


O ( log ⁡ 2 p ) O(\log^2 p) O(log2p)的解法:

与第一种情况一样,只需要将 p − 1 p-1 p1换成 ϕ ( p k ) = ( p − 1 ) p k − 1 \phi(p^k)=(p-1)p^{k-1} ϕ(pk)=(p1)pk1就行了。

O ( log ⁡ p ) O(\log p) O(logp)的解法:

现在求解方程 x 2 ≡ a ( m o d   p k ) x^2\equiv a(mod\text{ }p^k) x2a(mod pk)

其中 p ∤ a p\nmid a pa

先解出 r 2 ≡ a ( m o d   p ) r^2\equiv a(mod\text{ }p) r2a(mod p)

那么有 ( r 2 − a ) ≡ 0 ( m o d p ) ⇒ ( r 2 − a ) k ≡ 0 ( m o d   p k ) (r^2-a)\equiv 0\pmod p\Rightarrow (r^2-a)^k\equiv 0(mod\text{ }p^k) (r2a)0(modp)(r2a)k0(mod pk)

( r 2 − a ) k ≡ t 2 − u 2 a ( m o d   p k ) (r^2-a)^k\equiv t^2-u^2a(mod\text{ }p^k) (r2a)kt2u2a(mod pk)

我们有 ( r − a ) k = t − u a ( r + a ) k = t + u a (r-\sqrt a)^k=t-u\sqrt a \\ (r+\sqrt a)^k=t+u\sqrt a (ra )k=tua (r+a )k=t+ua

这个运算仍然在扩域后进行。

最终我们有 t 2 ≡ u 2 a ( m o d   p k ) t^2\equiv u^2a(mod\text{ }p^k) t2u2a(mod pk)

解出来的方程就是 t 2 u − 2 ≡ a ( m o d   p k ) t^2u^{-2}\equiv a(mod\text{ }p^k) t2u2a(mod pk)

能够证明 g c d ( t , p ) = g c d ( u , p ) = 1 gcd(t,p)=gcd(u,p)=1 gcd(t,p)=gcd(u,p)=1

所以逆元用扩展欧几里得求一下就行了。

3.模数为 2 k 2^k 2k

解的存在性

处理幂的方法与上面这种情况差不多,我们效仿上面先化成 x 2 ≡ a ( m o d 2 k ) , 2 ∤ a x^2\equiv a \pmod{2^k},2\nmid a x2a(mod2k),2a

那么现在呢,没有欧拉准则了啊。

从特殊情况谈起,先打一个表,把那些有解的 a a a找出来

k 有解的a
1 1
2 1
3 1
4 1,9
5 1,9,17,25
6 1,9,17,25,33,41,49,57

似乎当且仅当 a ≡ 1 ( m o d 8 ) a\equiv1\pmod{8} a1(mod8)的时候有解啊。。。

实际上,我们有如下的蕴含关系: a ≡ 1 ( m o d 8 ) ⇔ ∃ x , x 2 ≡ a ( m o d 2 k ) a\equiv1\pmod{8}\Leftrightarrow \exist x,x^2\equiv a\pmod{2^k} a1(mod8)x,x2a(mod2k)

必要性:

由于存在解 x 0 , x 0 2 ≡ a ( m o d 2 k ) x_0,x_0^2\equiv a\pmod{2^k} x0,x02a(mod2k)

由于 g c d ( a , 2 ) = 1 gcd(a,2)=1 gcd(a,2)=1,所以 g c d ( x 0 , 2 ) = 1 gcd(x_0,2)=1 gcd(x0,2)=1,不妨设 x 0 = 2 t + 1 x_0=2t+1 x0=2t+1

所以 a ≡ x 0 2 ≡ ( 2 t + 1 ) 2 ≡ 4 t ( t + 1 ) + 1 ( m o d 2 k ) a\equiv x_0^2\equiv (2t+1)^2\equiv 4t(t+1)+1\pmod{2^k} ax02(2t+1)24t(t+1)+1(mod2k)

显然 8 ∣ 4 t ( t + 1 ) 8\mid 4t(t+1) 84t(t+1),所以 a ≡ 1 ( m o d 8 ) a\equiv 1\pmod8 a1(mod8)

充分性:

由下面叙述的求解方法易证
(只要说明总能算出解,就能说明总是存在解,就好像拿着鸡下的蛋证明鸡会下蛋一样)


O ( k ) O(k) O(k)求解

一下内容学习自Miskcoo的博客,不过他的博客总是因为各种奇怪的原因打不开,链接我也找不到了,只有离线版本,所以我这里就照着他的思路来叙述求解方法

1. k ≤ 2 k\le2 k2

特判。

2. k = 3 k=3 k=3

二次剩余方程 x 2 ≡ a ( m o d 2 3 ) x^2\equiv a\pmod {2^3} x2a(mod23)有解,当且仅当 a ≡ 1 ( m o d 2 3 ) a\equiv 1\pmod{2^3} a1(mod23),且本质不同的解有四个: ± 1 , ± 5 \pm1,\pm5 ±1,±5

换句话说,我们可以将这个解记为 x = ± ( x 3 + t 3 × 2 2 ) , t 3 ∈ Z , x 3 = 1  or  5 x=\pm(x_3+t_3\times 2^2),t_3\in\mathbb Z,x_3=1\text{ or }5 x=±(x3+t3×22),t3Z,x3=1 or 5

3. k > 3 k > 3 k>3

假设我们已经知道方程 x 2 ≡ a ( m o d 2 q − 1 ) x^2\equiv a\pmod{2^q-1} x2a(mod2q1)
的解,显然解可以表示成 x 0 = ± ( x q − 1 + t q − 1 × 2 q − 2 ) , t q − 1 ∈ Z x_0=\pm(x_{q-1}+t_{q-1}\times 2^{q-2}),t_{q-1}\in \mathbb Z x0=±(xq1+tq1×2q2),tq1Z

考虑如何推导出 x q x_q xq t q t_q tq

为了方便,后面记 a i = a % 2 i a_i=a\% 2^i ai=a%2i

对于一个 x 2 ≡ a ( m o d 2 q − 1 ) x^2\equiv a\pmod{2^{q-1}} x2a(mod2q1) x q − 1 x_{q-1} xq1来说,在 % 2 q \%2^q %2q意义下,只可能有: x q − 1 2 ≡ a q − 1 ( m o d 2 q ) 或 是 x q − 1 2 ≡ a q − 1 + 2 q − 1 ( m o d 2 q ) \begin{aligned} &x_{q-1}^2\equiv a_{q-1} &\pmod{2^q} \\ 或是&x_{q-1}^2\equiv a_{q-1}+2^{q-1}&\pmod{2^q} \end{aligned} xq12aq1xq12aq1+2q1(mod2q)(mod2q)

所以我们就要求出合适的 t q − 1 t_{q-1} tq1的值,先代入方程 x 2 ≡ a ( m o d 2 q ) x^2\equiv a\pmod {2^q} x2a(mod2q)
( x q − 1 + 2 q − 2 × t q − 1 ) 2 ≡ a q ( m o d 2 q ) x q − 1 2 + 2 q − 1 t q − 1 ≡ a q ( m o d 2 q ) t q − 1 ≡ a q − x q − 1 2 2 q − 1 ( m o d 2 ) \begin{aligned} (x_{q-1}+2^{q-2}\times t_{q-1})^2 & \equiv a_q &\pmod{2^q} \\ x_{q-1}^2+2^{q-1}t_{q-1}&\equiv a_q &\pmod{2^q} \\ t_{q-1}& \equiv \frac{a_q-x_{q-1}^2}{2^{q-1}} &\pmod{2} \end{aligned} (xq1+2q2×tq1)2xq12+2q1tq1tq1aqaq2q1aqxq12(mod2q)(mod2q)(mod2)

所以满足要求的 t q − 1 = a q − x q − 1 2 2 q − 1 + 2 × t q , t q ∈ Z t_{q-1}=\frac{a_q-x_{q-1}^2}{2^{q-1}}+2\times t_q,t_q\in \mathbb{Z} tq1=2q1aqxq12+2×tq,tqZ

回到方程 x 2 ≡ a ( m o d 2 q ) x_2\equiv a \pmod{2^q} x2a(mod2q)它的解就是 x = ± ( x q − 1 + a q − x q − 1 2 2 + 2 k − 1 × t k ) , t k ∈ Z x=\pm(x_{q-1}+\frac{a_q-x_{q-1}^2}{2}+2^{k-1}\times t_k),t_k\in\mathbb{Z} x=±(xq1+2aqxq12+2k1×tk),tkZ

q = 3 q=3 q=3的情况开始一路递推即可。

4.模数任意

考虑唯一分解 p = ∏ i = 1 t p i k i p=\prod_{i=1}^{t}p_i^{k_i} p=i=1tpiki

那么我们只需要求解 t t t个二次剩余方程:
{ x 1 2 ≡ a ( m o d   p 1 k 1 ) x 2 2 ≡ a ( m o d   p 2 k 2 ) … … x t 2 ≡ a ( m o d   p t k t ) \left\{ \begin{aligned} &x_1^2\equiv a &&(mod\text{ }p_1^{k_1}) \\ &x_2^2\equiv a &&(mod\text{ }p_2^{k_2}) \\ &…… \\ &x_t^2\equiv a && (mod\text{ }p_t^{k_t}) \end{aligned} \right. x12ax22axt2a(mod p1k1)(mod p2k2)(mod ptkt)

然后用CRT合并一下就行了
{ x ≡ x 1 ( m o d   p 1 k 1 ) x ≡ x 2 ( m o d   p 2 k 2 ) … … x ≡ x t ( m o d   p t k t ) \left\{ \begin{aligned} &x\equiv x_1 &&(mod\text{ }p_1^{k_1}) \\ &x\equiv x_2 &&(mod\text{ }p_2^{k_2}) \\ &…… \\ &x\equiv x_t && (mod\text{ }p_t^{k_t}) \end{aligned} \right. xx1xx2xxt(mod p1k1)(mod p2k2)(mod ptkt)

代码实现:https://blog.csdn.net/zxyoi_dreamer/article/details/85373411

你可能感兴趣的:(证明,_____模板_____,二次剩余Cipolla)