Cipolla 二次剩余算法和简要证明

二次剩余的判定

在模奇素数 p 意义下:

ap12={1,a是二次剩余1,a不是二次剩余

1p1 这些数中,恰好有二分之一(p12 个)是二次剩余,二分之一不是。

一个同余式

在模奇素数 p 意义下:

(a+b)p=ap+(p1)ap1b++(pp1)abp1+bp=ap+bp

这是因为对于奇素数 pi[1,p1]p(pi)

Cipolla 算法

断言对于奇素数 p(a,p)=1,方程 x2a(modp) 的一个解可以用如下方式寻找:找到 r 使得 r2a 为二次非剩余,扩域令 j2=r2a,则 x(a+j)p+12(modp)。注意到这还表明 (a+j)p+12 虚部为 0。证明如下。

x2(r+j)p(r+j)(modp)(rp+jp)(r+j)(modp)(r+(j2)p12j)(r+j)(modp)(r+(r2a)p12j)(r+j)(modp)(rj)(r+j)(modp)r2j2(modp)r2(r2a)(modp)a(modp)

通过随机化寻找 r,期望 Θ(1) 次即可找到。时间复杂度为快速幂的复杂度,即一般的 Θ(logp)

posted @   kyEEcccccc  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示