寻找模质数意义下的二次剩余与三次剩余

指导思想

https://en.wikipedia.org/wiki/Cipolla%27s_algorithm

http://www.sciencedirect.com/science/article/pii/S0893965902000319

寻找模平方剩余

问题模型

给出质数p和整数a,求所有满足x2a(modp)x

Cipolla’s Algorithm

a=0p=2的情况特殊判断。

定义二次剩余符号(ap)ap12(modp),当其为1时表示a是二次剩余。

找到一个w使得w2a不是二次剩余,随机测试的期望次数为2。

在扩域上计算(w+w2a)p+12,则为一个可行的x,另外一个可行解为x

利用复数域的知识即可证明生成算法的正确性,时间复杂度O(logp)

寻找模立方剩余

问题模型

给出质数p和整数a,求所有满足x3a(modp)x

Peralta Method Extension

a=0p3的情况特殊判断。

如果p1(mod3),则xa2p13(modp)是唯一解。

否则(3p)=1,则ϵ=312为三次单位根,即ϵ31(modp)

此时有三分之一的数字是三次剩余,定义三次剩余符号[ap]ap13(modp),当其为1时表示a是二次剩余。

如果找到一个x,则其他解为xϵ,xϵ2

类似二次剩余的证明方法,对于a的立方根x,构造群R={2i=0fixi|fiZp,i=0,1,2},可以证明RZp×Zp×Zp同构,对于R中的元素zzp11(modp)

于是有一个极为暴力的想法是随机生成一个元素uR(也就是随机生成多项式的系数),令vup13(modp),则有v31(modp),如果v的多项式系数中只有f1非0,则(f1x)31(modp),那么f11必然是一个解,再利用ϵ生成即可。

类似地可以分析出满足v的多项式系数中只有f1非0的概率为19,期望试9次就可以得到一组解了。


其实方法有很多,都可以学习一下

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值