勒让德符号

对于一个奇质数,定义勒让德符号为,其中

如何计算勒让德符号?

这样就可以快速幂计算了。

Cipolla 算法

简要描述

要求解方程,首先判断是否是二次剩余。

然后随机一个使得不是二次剩余,那么设并扩域,则

勒让德符号只能判断一个数是否是二次剩余。接下来我们介绍 Cipolla 算法以用于具体计算二次剩余。

考虑方程。首先判断它是不是二次剩余。如果不是就不用求了。

考虑随机一个使得不是意义下的二次剩余。那么设。显然域()下是不存在的,我们称它是虚数单位元。我们对其扩域,这样得到一个新的域。也就是说

我们类比复数域,定义它的加法和乘法运算。那么是否满足域的所有性质呢?容易证明是满足的。这其中可能乘法逆元要难证一点。考虑,则变成

然后发现这个方程在域下是有解的。因此就证明了乘法逆元的存在。

此外,我们还可以知道

定理 1

证明:因为不是二次剩余,所以

定理 2是质数)。

证明:二项式定理。

那么一通操作猛如虎:

因此是另一个解。并且算出来虚部的系数一定是

时间复杂度。随机的复杂度就忽略不计了。

代码