就是求解形如 x 2 ≡ a ( m o d p ) x^2\equiv a \text{ } ( mod\text{ }p ) x2≡a (mod p)
的关于 x x x的方程。
下面从不同的模数开始分类讨论解决二次剩余问题的方法
如果关于 x x x的方程
x 2 ≡ a ( m o d p ) x^2\equiv a \text{ } ( mod\text{ }p ) x2≡a (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)2≡t2(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)=⎩⎪⎨⎪⎧1−10a是%p下的二次剩余a是%p下的二次非剩余a≡0(mod p)
稍后会告诉怎么求勒让德符号。
首先来考虑 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)≡a2p−1(mod p)
当 p ∣ a p \mid a p∣a的时候欧拉准则显然成立。
否则由费马小定理我们有 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1(mod\text{ }p) ap−1≡1(mod p)
所以必然有 a p − 1 2 ≡ ± 1 ( m o d p ) a^{\frac{p-1}{2}}\equiv \pm1(mod\text{ }p) a2p−1≡±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,x2≡a(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) a2p−1≡(x2)2p−1≡xp−1≡1(mod p)
必要性证明完毕
设 p p p有一个原根 g g g,那么必然有 g i ≡ a ( m o d p ) g^i\equiv a(mod\text{ }p) gi≡a(mod p)
则: g i ( p − 1 ) 2 ≡ 1 ( m o d p ) g^{\frac{i(p-1)}2}\equiv 1(mod\text{ }p) g2i(p−1)≡1(mod p)
由于 g g g为原根,所以必然会有 ( p − 1 ) ∣ i ( p − 1 ) 2 (p-1)\mid\frac{i(p-1)}{2} (p−1)∣2i(p−1)
即 i i i是偶数。
必然存在解 x 0 ≡ g i 2 ( m o d p ) x_0\equiv g^{\frac{i}2}(mod\text{ }p) x0≡g2i(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) a2p−1≡±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) x2≡ap−1≡−1(mod p),显然不可能,违反了费马小定理。
首先求出 p − 1 = 2 t s p-1=2^ts p−1=2ts, 2 ∤ s 2\nmid s 2∤s。
那么我们要求 x 2 ≡ a ( m o d p ) x^2\equiv a(mod\text{ }{p}) x2≡a(mod p)
即 a − 1 x 2 ≡ 1 ( m o d p ) a^{-1}x^2\equiv 1(mod\text{ }p) a−1x2≡1(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) a2p−1≡a2t−1s≡1(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)的根 (a−1xi2)2i≡1(mod p)的根
显然现在有 x t − 1 = a s + 1 2 x_{t-1}=a^{\frac{s+1}2} xt−1=a2s+1,我们要求的就是 x 0 x_0 x0。
考虑如何从 x q x_q xq计算出 x q − 1 x_{q-1} xq−1
设: ϵ q = a − 1 x q 2 \epsilon_q=a^{-1}x_q^2 ϵq=a−1xq2
由定义可以得到 ϵ q 2 q ≡ 1 ( m o d p ) \epsilon_q^{2^q}\equiv 1(mod\text{ }p) ϵq2q≡1(mod p)
则: ϵ q 2 q − 1 ≡ ± 1 ( m o d p ) \epsilon_q^{2^{q-1}}\equiv \pm1(mod\text{ }p) ϵq2q−1≡±1(mod p)
如果为 1 1 1,直接令 ϵ q − 1 = ϵ q , x q − 1 = x q \epsilon_{q-1}=\epsilon_q,x_{q-1}=x_q ϵq−1=ϵq,xq−1=xq即可。
否则设 λ x q ≡ x q − 1 ( m o d p ) \lambda x_q\equiv x_{q-1}(mod\text{ }p) λxq≡xq−1(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) ϵq−12q−1≡(a−1xq2λ2)2q−1(mod p)
则: λ 2 q ≡ − 1 ( m o d p ) \lambda^{2^q}\equiv-1(mod\text{ }p) λ2q≡−1(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) w2p−1≡w2t−1s≡−1(mod p)
令 λ ≡ w 2 t − 1 − q s ( m o d p ) \lambda\equiv w^{2^{t-1-q}s}(mod\text{ }p) λ≡w2t−1−qs(mod p)即可得到下一组解。
在这一部分的最后,会讲解如何寻找 % p \%p %p意义下的二次非剩余
这个解法由剑桥的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) x2≡a(mod p)
以下所有运算均在 % p \%p %p意义下进行
设 b 2 − a ≡ w ( m o d p ) b^2-a\equiv w(mod\text{ }p) b2−a≡w(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 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=0∑pCpkbkip−k
显然当 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) Cpk≡0(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)p≡bp+ip≡bp−1b+w2p−1i≡b−i(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≡(b−i)(b+i)≡b2−w≡a(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
首先仍然要判断解是否存在
进行解的存在性判断稍微麻烦了一些
设: a = p c m a=p^cm a=pcm, p ∤ m p\nmid m p∤m。
c ≥ k c\ge k c≥k,免谈,直接返回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) x02≡a(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 % pk−2t)
所以 p 2 t ∣ a p^{2t}|a p2t∣a,同时我们也可以这样将原方程化为 x 0 2 ≡ a / p c ( m o d p k − c ) x_0^2\equiv a/p^c (mod p^{k-c}) x02≡a/pc(modpk−c)
当新方程有解时,原方程也有解,将上面欧拉定则里面推理用的 p − 1 p-1 p−1换成 ϕ ( p k − c ) \phi(p^{k-c}) ϕ(pk−c)就行了。
最后解为 x = x 0 × p c 2 x=x_0\times p^{\frac{c}2} x=x0×p2c。
所以接下来只讨论 p ∤ a p\nmid a p∤a的情况。
与第一种情况一样,只需要将 p − 1 p-1 p−1换成 ϕ ( p k ) = ( p − 1 ) p k − 1 \phi(p^k)=(p-1)p^{k-1} ϕ(pk)=(p−1)pk−1就行了。
现在求解方程 x 2 ≡ a ( m o d p k ) x^2\equiv a(mod\text{ }p^k) x2≡a(mod pk)
其中 p ∤ a p\nmid a p∤a
先解出 r 2 ≡ a ( m o d p ) r^2\equiv a(mod\text{ }p) r2≡a(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) (r2−a)≡0(modp)⇒(r2−a)k≡0(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) (r2−a)k≡t2−u2a(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 (r−a)k=t−ua(r+a)k=t+ua
这个运算仍然在扩域后进行。
最终我们有 t 2 ≡ u 2 a ( m o d p k ) t^2\equiv u^2a(mod\text{ }p^k) t2≡u2a(mod pk)
解出来的方程就是 t 2 u − 2 ≡ a ( m o d p k ) t^2u^{-2}\equiv a(mod\text{ }p^k) t2u−2≡a(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
所以逆元用扩展欧几里得求一下就行了。
处理幂的方法与上面这种情况差不多,我们效仿上面先化成 x 2 ≡ a ( m o d 2 k ) , 2 ∤ a x^2\equiv a \pmod{2^k},2\nmid a x2≡a(mod2k),2∤a
那么现在呢,没有欧拉准则了啊。
从特殊情况谈起,先打一个表,把那些有解的 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} a≡1(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} a≡1(mod8)⇔∃x,x2≡a(mod2k)
由于存在解 x 0 , x 0 2 ≡ a ( m o d 2 k ) x_0,x_0^2\equiv a\pmod{2^k} x0,x02≡a(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} a≡x02≡(2t+1)2≡4t(t+1)+1(mod2k)
显然 8 ∣ 4 t ( t + 1 ) 8\mid 4t(t+1) 8∣4t(t+1),所以 a ≡ 1 ( m o d 8 ) a\equiv 1\pmod8 a≡1(mod8)
由下面叙述的求解方法易证
(只要说明总能算出解,就能说明总是存在解,就好像拿着鸡下的蛋证明鸡会下蛋一样)
一下内容学习自Miskcoo的博客,不过他的博客总是因为各种奇怪的原因打不开,链接我也找不到了,只有离线版本,所以我这里就照着他的思路来叙述求解方法
特判。
二次剩余方程 x 2 ≡ a ( m o d 2 3 ) x^2\equiv a\pmod {2^3} x2≡a(mod23)有解,当且仅当 a ≡ 1 ( m o d 2 3 ) a\equiv 1\pmod{2^3} a≡1(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),t3∈Z,x3=1 or 5
假设我们已经知道方程 x 2 ≡ a ( m o d 2 q − 1 ) x^2\equiv a\pmod{2^q-1} x2≡a(mod2q−1)
的解,显然解可以表示成 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=±(xq−1+tq−1×2q−2),tq−1∈Z
考虑如何推导出 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}} x2≡a(mod2q−1)解 x q − 1 x_{q-1} xq−1来说,在 % 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} 或是xq−12≡aq−1xq−12≡aq−1+2q−1(mod2q)(mod2q)
所以我们就要求出合适的 t q − 1 t_{q-1} tq−1的值,先代入方程 x 2 ≡ a ( m o d 2 q ) x^2\equiv a\pmod {2^q} x2≡a(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} (xq−1+2q−2×tq−1)2xq−12+2q−1tq−1tq−1≡aq≡aq≡2q−1aq−xq−12(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} tq−1=2q−1aq−xq−12+2×tq,tq∈Z
回到方程 x 2 ≡ a ( m o d 2 q ) x_2\equiv a \pmod{2^q} x2≡a(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=±(xq−1+2aq−xq−12+2k−1×tk),tk∈Z
从 q = 3 q=3 q=3的情况开始一路递推即可。
考虑唯一分解 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. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x12≡ax22≡a……xt2≡a(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. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x≡x1x≡x2……x≡xt(mod p1k1)(mod p2k2)(mod ptkt)
代码实现:https://blog.csdn.net/zxyoi_dreamer/article/details/85373411