【二次剩余】Cipolla(模意义下开根)

二次剩余Cipolla算法学习小记 Preface 今天zz大神给我们讲数论和代数,然后后面讲了几个超级神的算法。CipollaCipolla算是其中一个吧。貌似国内直接查名字还没有什么资料,查二次剩余的算法有ACdreamer简略的介绍。今天听讲时算是听懂了大半,回来又搞鼓了整个晚上才算完全弄明白。这个算法真的是从头到尾都是脑洞,太神了! 详细的解释见维基百科。 Paper 首先我们要弄清楚什么叫二次剩余,其实就是 阅读详情

在学多项式求逆的时候顺便就推了一下多项式的开根,
结果毫无疑问的要用到二c次剩余,顺路就学了一下,

二次剩余

给出 n , P n,P n,P(P为奇质数),如果存在一个 a a a 使得 a 2 ≡ n ( m o d P ) a^2\equiv n \pmod{P} a2≡n(modP) ,那么n在模P的意义下就是二次剩余,

CTY大佬的方法

因为这个问题是由二次开方引起的,自然,模数有已知原根 r r r,那么:
r 2 I n d r ( a ) ≡ r I n d r ( n ) ( m o d P ) r^{2Ind_r(a)}\equiv r^{Ind_r(n)} \pmod{P} r2Indr​(a)≡rIndr​(n)(modP)

I n d Ind Ind是离散对数里面的东西,定义为 r I n d r ( x ) ≡ x ( m o d P ) r^{Ind_r(x)}\equiv x \pmod{P} rIndr​(x)≡x(modP)

  • 定理1:方程 a 2 ≡ n ( m o d P ) a^2\equiv n \pmod{P} a2≡n(modP),只有 P − 1 2 \frac{P-1}{2} 2P−1​个n使方程有解(0除外)
  • 证明:可以发现,如果 I n d r ( n ) Ind_r(n) Indr​(n)为奇数的话,这个方程就无解,因为 I n d r ( n ) Ind_r(n) Indr​(n)相当于是在模P-1的意义下的,而P-1必为偶数,也就是不存在2的逆元; I n d r ( n ) Ind_r(n) Indr​(n)的取值范围为0~P-2,共有 p − 1 2 \frac{p-1}{2} 2p−1​为偶数,所以只有这么多个n使方程有解。

回归主题,要求出 I n d r ( a ) Ind_r(a) Indr​(a),也就是要求出 I n d r ( n ) Ind_r(n) Indr​(n),

那么如何快速求出 I n d r ( n ) Ind_r(n) Indr​(n)呢?
设一个阈值 ω \omega ω,那么 I n d r ( n ) Ind_r(n) Indr​(n)一定可以被表示成 a ω + b a\omega+b aω+b,
也就是:
r a ω ∗ r b ≡ n ( m o d P ) r^{a\omega}*r^{b}\equiv n \pmod{P} raω∗rb≡n(modP)
r b ≡ n ∗ ( r a ω ) − 1 ( m o d P ) r^{b}\equiv n*(r^{a\omega})^{-1} \pmod{P} rb≡n∗(raω)−1(modP)
显然,所有的 r b r^b rb可以预处理出来,
那么,剩下的只要枚举a了,判断是否有对应的b即可,
如果 ω = n \omega=\sqrt{n} ω=n ​,复杂度即为: O ( n log ⁡ ( n ) ) O(\sqrt{n}\log(n)) O(n ​log(n))(还有求逆元)

.

对于上面的定理1,其实还有一种证明:

  • 定理1:方程 a 2 ≡ n ( m o d P ) a^2\equiv n \pmod{P} a2≡n(modP),只有 P − 1 2 \frac{P-1}{2} 2P−1​个n使方程有解(0除外)
  • 证明:考虑对于所有的a,可以平方出多少个不同的n,
    如果两个数 a , b a,b a,b他们满足 a 2 ≡ b 2 ( m o d P ) a^2\equiv b^2 \pmod{P} a2≡b2(modP),那么 a 2 − b 2 ≡ 0 ( m o d P ) a^2-b^2\equiv 0 \pmod{P} a2−b2≡0(modP)也就是 ( a 2 − b 2 ) ∣ P (a^2-b^2)|P (a2−b2)∣P, ( a − b ) ( a + b ) ∣ P (a-b)(a+b)|P (a−b)(a+b)∣P,显然(a-b)不可能是P的倍数,所以(a+b)就肯定是P的倍数,也就是a,b也满足: a + b = P a+b=P a+b=P,
    所以能组合出的不同的n就只有 P − 1 2 \frac{P-1}{2} 2P−1​个

Cipolla

介绍一个东西:勒让德符号(Legendre symbol)

定义为: ( n P ) = { 1 n在模P意义下是二次剩余 − 1 n在模P意义下是非二次剩余 0 , n ≡ 0 ( m o d P ) \left(\frac{n}{P}\right)=\begin{cases} 1& \text{n在模P意义下是二次剩余}\\ -1& \text{n在模P意义下是非二次剩余}\\ 0,&n\equiv0\pmod{P} \end{cases} (Pn​)=⎩⎪⎨⎪⎧​1−10,​n在模P意义下是二次剩余n在模P意义下是非二次剩余n≡0(modP)​

求值也很简单:(当然你用上边的方法判定没人拦…)

  • 定理2: ( n P ) ≡ n P − 1 2 ( m o d P ) \left(\frac{n}{P}\right)\equiv n^{\frac{P-1}{2}} \pmod{P} (Pn​)≡n2P−1​(modP)
  • 证明:先证明 n P − 1 2 n^{\frac{P-1}{2}} n2P−1​在模P的意义下一定为0或-1或1,
  • 等于0显然,对于对于1/-1,根据费马小定理,一定有 n P − 1 ≡ 1 ( m o d P ) n^{P-1}\equiv 1 \pmod{P} nP−1≡1(modP),也就是设方程 x 2 ≡ 1 ( m o d P ) x^2\equiv 1\pmod{P} x2≡1(modP),x只能是1/-1,这个可以把左边的方程移项解得;
  • 接下来是正确性的证明:如果 n P − 1 2 ≡ 1 ( m o d P ) n^{\frac{P-1}{2}}\equiv 1 \pmod{P} n2P−1​≡1(modP),令 a 2 ≡ n ( m o d P ) a^2\equiv n \pmod{P} a2≡n(modP),那么 ( a 2 ) P − 1 2 ≡ n P − 1 2 ( m o d P ) (a^{2})^{\frac{P-1}{2}}\equiv n^{\frac{P-1}{2}} \pmod{P} (a2)2P−1​≡n2P−1​(modP),也就是 a P − 1 ≡ 1 ( m o d P ) a^{P-1}\equiv 1 \pmod{P} aP−1≡1(modP),显然存在至少一个a满足;
  • 如果 n P − 1 2 ≡ − 1 ( m o d P ) n^{\frac{P-1}{2}}\equiv -1 \pmod{P} n2P−1​≡−1(modP),依旧令 a 2 ≡ n ( m o d P ) a^2\equiv n \pmod{P} a2≡n(modP),那么 ( a 2 ) P − 1 2 ≡ n P − 1 2 ( m o d P ) (a^{2})^{\frac{P-1}{2}}\equiv n^{\frac{P-1}{2}} \pmod{P} (a2)2P−1​≡n2P−1​(modP),也就是 a P − 1 ≡ − 1 ( m o d P ) a^{P-1}\equiv -1 \pmod{P} aP−1≡−1(modP),显然没有a满足;

接下来,开始脑洞…(遇到看不懂的没关系继续往下看先)

首先我们先开始不停的随机,直到找到一个t,使得 ( t 2 − n n ) = − 1 \left( \frac{t^2-n}{n} \right)=-1 (nt2−n​)=−1,(先别管为什么)找出t的期望随机次数为2,(因为有 P − 1 2 \frac{P-1}{2} 2P−1​个是无解的,即每次有0.5的概率找到)

$ \frac{t^2-n}{n}$是不能被开方的,那么我们就强行让它可以开方;设 ω = t 2 − n \omega=\sqrt{t^2-n} ω=t2−n ​(类似于 i = − 1 i=\sqrt{-1} i=−1 ​),

最终的答案就是: a ≡ ( t + ω ) P + 1 2 ( m o d P ) a\equiv(t+\omega)^{\frac{P+1}{2}}\pmod{P} a≡(t+ω)2P+1​(modP)
要证明还要有两个结论:

  • 定理3: ω P ≡ − ω ( m o d P ) \omega^P \equiv -\omega\pmod{P} ωP≡−ω(modP)

  • 证明: ω P = ω ∗ ω P − 1 = ω ∗ ( ω 2 ) P − 1 2 = ω ∗ ( t 2 + n ) P − 1 2 = − ω \omega^P=\omega*\omega^{P-1}=\omega*(\omega^2)^{\frac{P-1}{2}}=\omega*(t^2+n)^{\frac{P-1}{2}}=-\omega ωP=ω∗ωP−1=ω∗(ω2)2P−1​=ω∗(t2+n)2P−1​=−ω

  • 定理4: ( a + b ) P ≡ a P + b P ( m o d P ) (a+b)^P\equiv a^P+b^P \pmod{P} (a+b)P≡aP+bP(modP)

  • 证明: ( a + b ) P = ∑ i = 1 P C P i a i b P − i (a+b)^P=\sum_{i=1}^P C_P^ia^ib^{P-i} (a+b)P=i=1∑P​CPi​aibP−iC公式里面的质数P是无法消掉的,所以除了 C p 1 C_p^1 Cp1​和 C P P C_P^P CPP​其他的C公式都是P的倍数,会被模掉。

有了这俩,就可以证明了:(还有一个显然的结论: t P ≡ t ( m o d P ) t^P\equiv t\pmod{P} tP≡t(modP))
在这里插入图片描述

最后把过程写上,

  • 找到t使得 ( t 2 − n n ) = − 1 \left( \frac{t^2-n}{n} \right)=-1 (nt2−n​)=−1,设 ω = t 2 − n \omega=\sqrt{t^2-n} ω=t2−n ​
  • 方程 a 2 ≡ n ( m o d P ) a^2\equiv n \pmod P a2≡n(modP)的解为 a ≡ ( t + ω ) P + 1 2 ( m o d P ) a\equiv(t+\omega)^{\frac{P+1}{2}} \pmod{P} a≡(t+ω)2P+1​(modP)

给出一道例(裸)题:
【Timus Online Judge 1132】 Square Root

模平方根与Cipolla算法 描述   Cipolla算法用于求解一般形式的模平方根,如m2≡c (mod p)m^2\equiv c\ (mod\ p)m2≡c (mod p)已知ccc反解mmm的过程。 定理引入   该算法需要一定的数论基础,比如费马小定理、域相关知识。在证明过程中用到了下面的定理,在此只做引入不做证明。 定理1:   由欧拉判别法知:对于x2≡a (mo... 阅读详情

相关推荐

二次剩余(Cipolla)

Cipolla求二次剩余

Video_game的博客 2345

二次剩余(模意义开方)

二次剩余,就是求解方程x2≡nmodp此时p为一个奇素数,就是常规的二次剩余问题。

dongzheren2008的博客 597

配置cts performance最优范围

这里写自定义目录标题cts例如此案例中,我们多测几次,发现Measured frame rate 的平均值为average=(380+389+380+371)/4=380 cts by VinterYoung Expected achievable frame rates for OMX.MTK.VIDEO.DECODER.HEVC video/hevc 1280x720: [75.0, 262.0]. Measured frame rate: [380.5645006622224, 389.3983545

o343196469的博客 1317

知识点 - 二次剩余

知识点 - 二次剩余 解决问题类型: 求模意义下的平方根 一些公式推导有用 定义 q被称作模n的二次剩余quadratic residue 当且仅当存在x使得: x2=q(mod n) x^2=q(mod\ n) x2=q(mod n) 否则q被称作二次非剩余quadratic nonresidue 性质 两个二次剩余的乘积还是二次剩余 模n的二次剩余的数量不会超过n/2 + ...

qq_41848675的博客 4337

网闸的基本配置

本文详细介绍了网闸的基本配置流程,包括物理连接与初始化、网络基础配置、核心数据交换策略配置、安全增强配置、管理与运维以及测试验证等关键步骤。网闸通过在物理隔离环境下建立"数据摆渡通道",实现特定业务数据的安全交换。配置时应遵循最小化、单向化、内容控制和审计原则,确保只开放必要通道,优先采用单向传输,进行内容安全检查并记录操作日志。不同厂商网闸的配置界面可能不同,但核心逻辑是相通的。

qq_39980997的博客 1839

Android 16(API 36)状态栏颜色适配全攻略:从沉浸式到自定义背景

本文全面解析Android 16(API 36)强制沉浸式状态栏带来的适配挑战,提供了从FrameLayout包裹法到动态修改Window背景色的核心解决方案。针对传统状态栏颜色设置失效问题,详细阐述了如何利用WindowInsets API实现自定义背景,并涵盖全屏模式、Fragment切换及第三方ROM兼容性等实战场景,为开发者提供一站式适配指南。

weixin_29227425的博客 594

数论——快速幂全解(模平方根算法)

模平方根算法 求a的b次方有库函数pow(a, b),可是它返回值是double类型,而且在不同开发环境下,数据有精度误差,而且b稍微大一点,必然会超 int 范围。所以,就需要模平方根算法,也就是通常说的快速幂。 原理: 求 ama^mam 可如下进行,其中 a,ma,ma,m 是正整数: 将 mmm 表示为二进制形式 bkbk−1…b0b_kb_{k-1}\dots b_0bk​bk−1​…b0​ ,即:m=bk2k+bk−12k+1+⋯+b12+b0m=b_k2^k+b_{k-1}2^{k+1}+\d

https://github.com/ZichengCao 1831

Hermes深入理解及源码解析(二):Hermes的记忆机制

源码位置:tools/memory_tool.py存储内容为两个文件,放在 ~/.hermes/memories/:MEMORY.md:Agent 自己的笔记(环境事实、项目约定、工具坑、学到的东西)—— 上限 2200 字符USER.md:关于用户的画像(角色、偏好、沟通风格)—— 上限 1375 字符作为一个独立的工具注册在系统中(为了让智能体正确使用它,System Prompt()中明确下达了禁令存储目标存储位置数据类型持久偏好/事实MEMORY.md我是谁、我喜欢什么、环境配置。

qq_41984117的博客 558

【模板】二次剩余

二次剩余,。也就是对于常数 nn 解这样一个方程:这里只介绍模数 pp 为奇素数的解法,也就是 Cipolla 算法。以下运算皆指模 pp 意义下的运算。

dingjiapeng1234的博客 1063

DSP TMS320F280049之CCS工程的建立(库函数版)

TMS320F280049 DSP是TI最新出的一款C2000系列的DSP,主频为100MHZ,功能较为强大,具有较多的片上模拟外设。这一节主要讲述如何新建F280049的CCS工程。 Step1.下载文件: 下载C2000Ware软件并安装。下载地址如下: http://www.ti.com.cn/tool/cn/C2000WARE?keyMatch=C2000Ware%2...

fanxianyan1993的博客 1万+

把财务与管理会计装进一张表:读懂 S/4HANA 的 ACDOCA

别慌,这反而是设计所需。只是大量历史上为汇总、加速而建的索引与汇总表被淘汰或改造,很多被兼容视图 compatibility views 替代,通过视图去 ACDOCA 或 ACDOCT 取数,从而保证老代码还能 SELECT 到数据,但失去写权限。它把原来分散在多张表里的信息整合到一起,例如总账、固定资产、物料账、盈利能力分析 CO-PA、成本控制等维度,发布过的资料多次强调这一点。其二,查询必须带上高选择性的条件,尤其是 RLDNR、RBUKRS、GJAHR 这三个维度,能大幅降低列存扫描的代价。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 941

笔记-二次剩余

二次剩余   传送门:P5491 模板 二次剩余 题目大意   二次剩余俗称模意义开根,给出 nnn 和 ppp 解方程: x2≡n(modp) x^2 \equiv n \pmod p x2≡n(modp)   我们保证 ppp 是一个奇素数 定义   其实二次剩余的意思就是一个数 nnn,我们将 111 到 nnn 的所有数都平方一下变成: 1,4,9,16,⋯ ,n21, 4, 9, 16, \cdots, n^21,4,9,16,⋯,n2   然后将这些数都模一个 ppp,这样就剩下了一些数,这些

ID246783的博客 721

【第2章>第10节】深度学习DenseNet模型分析与matlab仿真

本文介绍了基于DenseNet深度学习模型的图像分类MATLAB实现方法。主要内容包括:1. DenseNet模型原理,详细解析了初始卷积层、密集块、过渡层等核心结构;2. 在MATLAB环境下完成DenseNet工具箱安装和测试样本准备;3. 实现图像预处理(统一缩放为224×224)、模型训练和测试的完整流程;4. 提供了混淆矩阵和准确率等测试结果分析。文章附带完整的MATLAB程序代码和操作视频教程,适合深度学习初学者快速掌握DenseNet模型的图像分类应用。通过实际测试,验证了该方案的有效性。

FPGA/MATLAB学习教程/源码/项目合作开发 330

二次剩余的判定及Cipolla算法

二次剩余 ppp是奇素数。所有的运算都是在群Zp∗Z_{p}^{*}Zp∗​中的运算。方程x2=a≠0x^2=a \neq 0x2=a̸​=0问是否有解,以及解是什么?若有解,aaa就是模ppp的二次剩余;若无解,则aaa就是模ppp的非二次剩余。 a=0a=0a=0,显然只有唯一解x=0x=0x=0. a≠0a\neq 0a̸​=0,有解等价于ap−12=1a^{\frac{p-1}{2...

稻云麦花的博客 1599

汽车LIN总线(3) -- 协议层:帧的类型

主要介绍LIN协议层中帧的类型,介绍中加入一点自己的理解(带下划线的是,其余是官方资料)。

晴朗luo的博客 888

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

二次剩余Cipolla算法

欧拉准则 欧拉准则:设p为奇素数,则 ap−12≡(ap)(mod p) a^{\frac{p-1}{2}}\equiv (\frac{a}{p})(mod\ p) a2p−1​≡(pa​)(mod p) 其中ap\frac{a}{p}pa​为勒让德符号 证明:假设a为二次剩余,如a≡b2(mod p)a\equiv b^2(mod\ p)a≡b2(mod ...

FLY_WHITE的博客 1275

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

二次剩余与Cipolla算法

二次剩余与Cipolla算法 若存在x,使得 x2≡a(modp)x^2\equiv a \pmod{p}x2≡a(modp) 成立且a不是p的倍数,则称a为模p的二次剩余。 下文只讨论p为奇素数的情况。 1、模p二次剩余的个数 对于一个素数p,p的二次剩余有(p-1)/2个,非二次剩余有(p-1)/2个。 因为有(p−x)2≡x2(modp)(p-x)^2\equiv x^2 \pmod{p}(p−x)2≡x2(modp),所以在[1,(p-1)/2]范围内即可得到模p的所有二次剩余数,只需要证明在[1,

WedsonLin的博客 899

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

二次剩余之 Cipolla 算法学习笔记

文章目录前言二次剩余问题一些定理定理 1定理 2定理 3定理 4(欧拉判定准则)Cipolla 算法与其正确性证明 前言 曾经,在数个月以前,我学过一波二次剩余…… 只不过当时是被 SaInT7 所胁迫,而且时间仓促,精神不集中,最终只解得皮毛。 现在我重新学了一遍,略作总结。 二次剩余问题 已知同余方程 x2≡n(modp)x^2 \equiv n \pmod px2≡n(modp),给定 n,...

smarthehe的博客 776

二次剩余Cipolla算法学习笔记

\(Cipolla\)好像是个很厉害的东西……虽然我觉得这东西直接用离散对数+\(bsgs\)艹过去也可以…… 如无特殊说明,以下均默认\(p\)为模数,且\(p\)为奇素数 如无特殊说明,以下均认为运算在\(\mathbb{F}_p\)下进行(元素为\(0\)到\(p-1\)这\(p\)个元素,运算为模\(p\)意义下的加减乘除) 定义 二次剩余 对于\(P,n\),若存在\(x\),满足 \[...

weixin_30302609的博客 199

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

给出质数p和整数a,求所有满足x^2≡a(mod p)的x,可以使用Cipolla's Algorithm。给出质数p和整数a,求所有满足x^3≡a(mod p)的x,可以使用Peralta Method Extension。

skywalkert's space 9808

浅谈二次剩余

二次剩余是数论基本概念之一。它是初等数论中非常重要的结果。俗称模意义开根。二次剩余定义:若存在整数x,对于整数d满足x2≡amodp,称a是模p意义下的二次剩余。下面探讨p为奇素数的情况(因为p2时没什么意义)。使用Cipolla算法求解。当a0时显然x0,下面就不讨论了。

dygxczn的博客 1865

同余意义下的运算法则与逆元、和二次剩余、和数论四大定理

同余:(这里只讲整数的同余) 101010除以777余数是333,171717除以777余数也是333,那么就称101010与171717在模777意义下同余,符号表示为  10≡17  (mod  7)\;10\equiv 17 \; (mod \; 7)10≡17(mod7)。   然后,很容易得到一些性质: 自反性:a≡a  (mod  m)a\equiv a \; (mod \...

Zimba_的博客 2818

二次剩余定理及Cipolla算法入门到自闭

二次剩余定义: 在维基百科中,是这样说的:如果q等于一个数的平方模 n,则q为模 n 意义下的二次剩余。例如:x2≡n(modp)。否则,则q为模n意义下的二次非剩余。 Cipolla算法:一个解决二次剩余强有力的工具,用来求得上式的x的一个算法。 需要学习的数论及数学基础:勒让德符号、欧拉判别准则和复数运算。 勒让德符号:判断n是否为p的二次剩余,p为奇质数。 欧拉定...

apple50052014的博客 622

二次剩余学习笔记

若∃x\exists x∃x,使得x2≡nmodpx2≡nmodp,则称nnn为二次剩余,否则为二次非剩余。

qq_43041641的博客 712
上一篇: 【JZOJ 4051】【SDOI2015第1轮第1试】序列统计
下一篇: 【JZOJ 5500】【清华集训2017模拟12.10】营养餐
HOWARLI
博客等级 码龄11年 109粉丝 378原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值