二次剩余Cipolla算法学习小记

前言

之前遇到过一些关于二次剩余的题目,因为姿势不够都跳了。由于最近觉得自己的数论姿势严重不足,便觉得有必要来学习一下二次剩余相关的算法。
学完后感觉这个算法作者的脑洞真的是比较大,居然能想出这么巧妙的构造。
关于这个算法的介绍,我比较推荐czy大爷的博文。

前置技能

(以下内容均在模数 p p p为奇素数的前提下讨论)

二次剩余

首先要搞懂什么是二次剩余。若方程 x 2 ≡ a ( m o d p ) x^2\equiv a\pmod p x2a(modp)有解,则称 a a a p p p的二次剩余,反之则称 a a a p p p的二次非剩余。说白了就是在模意义下能否开根号。
###勒让德符号
勒让德符号是这样定义的:
( a p ) = { 1 , a 为 p 的 二 次 剩 余 − 1 , a 为 p 的 二 次 非 剩 余 0 , a ≡ 0 ( m o d p ) \left(\frac{a}{p}\right)= \begin{cases} 1, & a为p的二次剩余 \\ -1, & a为p的二次非剩余\\ 0, & a\equiv 0\pmod p \end{cases} (pa)=1,1,0,apapa0(modp)

欧拉判别法

a a a是不被 p p p整除的正整数,则 ( a p ) ≡ a p − 1 2 \left(\frac{a}{p}\right)\equiv a^{\frac{p-1}{2}} (pa)a2p1
证明:

( a p ) = 1 \left(\frac{a}{p}\right)=1 (pa)=1时,方程 x 2 ≡ a ( m o d p ) x^2\equiv a\pmod p x2a(modp)有解。根据费马小定理可得 a p − 1 2 ≡ 1 ( m o d p ) a^{\frac{p-1}{2}}\equiv 1\pmod p a2p11(modp)

( a p ) = − 1 \left(\frac{a}{p}\right)=-1 (pa)=1时,方程 x 2 ≡ a ( m o d p ) x^2\equiv a\pmod p x2a(modp)无解。因为 p p p是素数,由数论知识可知对于每个 1 < = i < p 1<=i<p 1<=i<p,都有唯一的一个整数 j j j使得 i j ≡ a ( m o d p ) ij\equiv a\pmod p ija(modp)。所以我们可以把 1 , 2 , . . . , p − 1 1,2,...,p-1 1,2,...,p1分成 p − 1 2 \frac{p-1}{2} 2p1对,使得每对的乘积都为 a a a
于是有 ( p − 1 ) ! ≡ a p − 1 2 (p-1)!\equiv a^{\frac{p-1}{2}} (p1)!a2p1。根据威尔逊定理有 ( p − 1 ) ! ≡ − 1 ( m o d p ) (p-1)!\equiv -1\pmod p (p1)!1(modp),可得 a p − 1 2 ≡ − 1 ( m o d p ) a^{\frac{p-1}{2}}\equiv -1\pmod p a2p11(modp)

定理1

定理1:对于方程 x 2 ≡ a ( m o d p ) x^2\equiv a\pmod p x2a(modp),总共有 p − 1 2 \frac{p-1}{2} 2p1个不同的 n n n使得该方程有解。
证明:若有两个数 u u u v v v均满足它们的平方在模 p p p意义下同余,那么必然有 p ∣ ( u + v ) ( u − v ) p|(u+v)(u-v) p(u+v)(uv)。由于 p p p不可能整除 u − v u-v uv,那么可以得出 p p p整除 u + v u+v u+v。这个结论反过来也是成立的,因此共有 p − 1 2 \frac{p-1}{2} 2p1种不同的平方。且每一个 p p p的二次剩余恰好有两个解。

###定理2
定理2: ( a + b ) p ≡ a p + b p ( m o d p ) (a+b)^p\equiv a^p+b^p\pmod p (a+b)pap+bp(modp)
证明:通过二项式展开可以得到 ( a + b ) p = ∑ k = 0 p C p k a k b p − k (a+b)^p=\sum_{k=0}^pC_p^ka^kb^{p-k} (a+b)p=k=0pCpkakbpk
因为当 k k k不等于 p p p且不为 0 0 0时, C p k C_p^k Cpk中的 p p p是不可能被消掉的,于是就会在取模时被消掉。

Cipolla算法

我们现在要求 x 2 ≡ n ( m o d p ) x^2\equiv n\pmod p x2n(modp)的一个解。
先随机出一个 a a a使得 ( a 2 − n ) p − 1 2 ≡ − 1 ( m o d p ) (a^2-n)^{\frac{p-1}{2}}\equiv -1\pmod p (a2n)2p11(modp)。由于 p p p的非二次剩余的数量为 p − 1 2 \frac{p-1}{2} 2p1,所以随机到一个满足条件的 a a a的期望随机次数为 2 2 2
求出 a a a,之后显然 a 2 − n a^2-n a2n并不能开根号。但我们就是强行让他开根号!设 ω = a 2 − n \omega=\sqrt{a^2-n} ω=a2n 为虚数单位,类似于 i = − 1 i=\sqrt{-1} i=1 。那么这一个“复数域” F p 2 \mathbb{F}_{p^2} Fp2的每一个数都可以表示成 a + ω b a+\omega b a+ωb的形式,且这个数域仍然有很多很好的性质,具体见下面:
二次剩余Cipolla算法学习小记_第1张图片
有一个结论就是 x = ( a + ω ) p + 1 2 x=(a+\omega)^{\frac{p+1}{2}} x=(a+ω)2p+1
证明:
x 2 ≡ ( a + ω ) p + 1 x^2\equiv (a+\omega)^{p+1} x2(a+ω)p+1
≡ ( a + ω ) p ( a + ω ) \equiv (a+\omega)^p(a+\omega) (a+ω)p(a+ω)
≡ ( a − ω ) ( a + ω ) \equiv (a-\omega)(a+\omega) (aω)(a+ω)
≡ a 2 − ω 2 \equiv a^2-\omega^2 a2ω2
≡ a 2 − a 2 + n \equiv a^2-a^2+n a2a2+n
≡ n ( m o d p ) \equiv n\pmod p n(modp)
根据拉格朗日定理可得答案中 ω \omega ω的系数必然为 0 0 0,所以问题就被我们圆满解决了。

你可能感兴趣的:(二次剩余,数论,学习小记)