二次剩余(Cipolla's algorithm)学习笔记
先放资料。
前置技能点:
剩余系**:设模为m,则根据余数可将所有的整数分成m类,分别记成[0],[1],[2],…[m-1]****,**
这m个数**{0,1,2,****…****m-1}**称为一个完全剩余系,
每个数称为相应类的代表元。
当m=10(偶数)时候,则{0,1,2,3,4,5,6,7,8,9}是最小非负完全剩余系
{-5,-4,-3,-2,-1,0,1,2,3,4,5} 是绝对值最小完全剩余系
{-4,-3,-2,-1,0,1,2,3,4,5} 绝对值最小
{1,2,3,4,5,6,7,8,9,10}是最小正完全剩余系
简化剩余系:在每个剩余类选取至1个与m互素代表元构成简化剩余系。
当m=10则,{0,1,2,3,4,5,6,7,8,9} 完全剩余系
{1,3,7,9}是简化剩余系(x,10)=1
当m=5则,{0,1,2,3,4}为完全剩余系,
{1,2,3,4}是简化剩余系,因为除去余0(正好是倍数)外,其它都互素。
f(m)=欧拉函数=|{t|0<t<m, (t, m)=1}|
=简化剩余系的元素个数
设_p_为奇[质数](https://zh.wikipedia.org/wiki/),_a_是一个与_p_[互质](https://zh.wikipedia.org/wiki/)的整数。考虑以下数组: 以及它们对_p_的[最小非负剩余](https://zh.wikipedia.org/w/index.php?title=&action=edit&redlink=1)。这些剩余两两不等(**kk:这些剩余两两不等的证明:可以考虑反证,假设两个不同的数x,y对于p同余, 那么x-y和0关于p同余,而x-y同时关于a同余,a与p互质,矛盾。因此这些剩余两两不等**),因此我们共有 个两两不等的介于1和_p(_**kk:这里似乎有问题,如果剩余是在1..p之间,那么前面应该是说最小正剩余而不是最小非负剩余,最小非负剩余应该是在0..p-1之间**_)_之间的整数: 。设其中有_n_个数比_p_/2大,那么高斯引理声称:上式左边是勒让德符号,当其值为+1时,表示_a_是模_p_的二次剩余;其值为-1时,表示_a_是模_p_的二次非剩余。
用通俗的语言来说,就是:
里面比_p_/2大的有偶数个,那么_a_是模_p_的二次剩余,如果有奇数个,那么_a_是模_p_的二次非剩余。
正片:
定义:
勒让德符号 (有时为了印刷上的方便,写成(_a_|_p_))有下列定义:
 如果 如果 ,且对于某个整数
![]()
如果不存在整数 ,使得
。
如果(a|p) = 1,a 便称为二次剩余(mod p);如果(a|p) = −1,则 a 称为二次非剩余(mod p)。通常把零视为一种特殊的情况。
性质:
勒让德符号有许多有用的性质,可以用来加速计算。它们包括:* 
(它是一个**完全积性函数**(kk:g(a)g(b)=g(ab)对于任意正整数a,b都成立,不需要gcd(a,b)=1,完全积性真是爽哭了。。。。)。这个性质可以进一步理解为:两个剩余或非剩余的乘积是剩余,一个剩余与一个非剩余的乘积是非剩余。(kk:因为负负得正,正正得正...))
* 如果_a_ ≡ _b_ (mod _p_),则 *  * 
这个性质称为二次互反律的第一补充。
* 
这个性质称为二次互反律的第二补充。一般的二次互反律为:
* 如果_p_和_q_是奇素数,则
以下是一些较小的_p_的值的公式:
* 对于奇素数_p_, * 对于奇素数_p_,
但一般直接把剩余和非剩余列出更简便:
* 对于奇素数_p_,
勒让德符号(a|p)是一个狄利克雷特征(mod p)。
计算勒让德符号的一个例子:
(完全积性)
(161和823关于331同余)
(完全积性)
(二次互反律)
(同余数)
(完全积性,平方的形式值一定为1)
(分别计算,可以参考小素数时的分段函数,具体的计算方法见下文)
维基百科_欧拉准则(用来计算勒让德符号)
若 是奇[质数](https://zh.wikipedia.org/wiki/)且 不能整除 ,则:
是模
的二次剩余当且仅当:
![]()

是模
的非二次剩余当且仅当:
![]()
**以勒让德符号表示,即为:
**
例子一:对于给定数,寻找其为二次剩余的模数
令_a_ = 17。对于怎样的质数_p_,17是模_p_的二次剩余呢?
根据判别法里给出的准则,我们可以从小的质数开始检验。
首先测试_p_ = 3。我们有:17(3 − 1)/2 = 171 ≡ 2 (mod 3) ≡ -1 (mod 3),因此17不是模3的二次剩余。
再来测试_p_ = 13。我们有:17(13 − 1)/2 = 176 ≡ 1 (mod 13),因此17是模13的二次剩余。实际上我们有:17 ≡ 4 (mod 13),而22 = 4.
运用同余性质和勒让德符号可以加快检验速度。继续算下去,可以得到:
对于质数_p_ =
,(17/p) = +1(也就是说17是模这些质数的二次剩余)。
对于质数_p_ =
,(17/p) = -1(也就是说17是模这些质数的二次非剩余)。
(**kk:简单得说,就是从小到大枚举质数p,验证a^((p-1)/2))%p等于1还是-1.)**
例子二:对指定的质数_p_,寻找其二次剩余
哪些数是模17的二次剩余?
我们可以手工计算:(kk:手算考虑数的平方是因为,勒让德符号是完全积性函数&&
)
12 = 1 22 = 4 32 = 9 42 = 16 52 = 25 ≡ 8 (mod 17) 62 = 36 ≡ 2 (mod 17) 72 = 49 ≡ 15 (mod 17) 82 = 64 ≡ 13 (mod 17)
于是得到:所有模17的二次剩余的集合是
。要注意的是我们只需要算到8,因为9=17-8,9的平方与8的平方模17是同余的:92 = (−8)2 = 82 ≡ 13 (mod 17).(同理不需计算比9大的数)。
但是对于验证一个数是不是模17的二次剩余,就不必将所有模17的二次剩余全部算出。比如说要检验数字3是否是模17的二次剩余,只需要计算3(17 − 1)/2 = 38 ≡ 812 ≡ ( − 4)2 ≡ − 1 (mod 17),然后由欧拉准则判定3不是模17的二次剩余。
对于两个奇[素数](https://zh.wikipedia.org/wiki/) 和  ,其中
是勒让德符号。
关于二次互反律的证明就不多说了。。。据说高斯一次给出了五个(还是七个?),到现在一共有200+种证明。
然后。。。感觉。。。。二次互反律。。。。太神了。。。。太美了。。。。真的被震撼到了orz