首先是素数模同余方程的相关理论。

下设 $p\in $ 是质数,\(f(x)=\sum_{i=0}^n a_ix^i\),\(x\in \Z_p,p\not\mid a_n\)。

引理 1

如果 \(f(x)\equiv 0\pmod p\) 具有解 \(x_1\sim x_k\),且 \(k\le n\)。则

\[f(x)\equiv g(x)\prod (x-x_i)\pmod p
\]

其中 \(\deg g=n-k,[x^{n-k}]g(x)=a_n\)。

归纳法不难证明此命题。

可以推出威尔逊定理。

定理 1 Lagrange 定理

\[f(x)\equiv 0\pmod p
\]

至多具有 \(n\) 个不同解。

证明:

设其具有解 \(x_1\sim x_{n+1}\),则有

\[f(x)\equiv a_n\prod_{i=1}^n (x-x_i)\pmod p
\]

取 \(x=x_{n+1}\),右侧任何数都不整除 \(p\)。

推论:如果有超过 \(n\) 个解,那么所有系数整除 \(p\)。

定理 2

设 \(n\le p\),则首一多项式 \(f(x)\equiv 0\pmod p\) 有 \(n\) 个解,当且仅当:

存在整系数多项式 \(q(x),r(x)\),且 \(\deg r<n\),满足:

\[x^p-x=f(x)q(x)+pr(x)
\]

证明:

首先证明必要性。若 \(f(x)\equiv 0\pmod p\) 有 \(n\) 个解,那么考虑 \(r_1(x)=x^p-x-f(x)q(x)\),应该有 \(n\) 个解。而 \(n>\deg r_1\),故 \(r_1\) 的系数整除 \(p\)。那么 \(r_1(x)=pr(x)\)。

充分性:首先 \(x^p-x=f(x)q(x)+pr(x)\equiv 0\pmod p\) 有 \(p\) 个解,根据费马小定理。设 \(f(x)\equiv 0\pmod p\) 有 \(s\) 个解,显然 \(s\le n\)。

而 \(q(x)\equiv 0\) 有至多 \(p-n\) 个解,又因为 \(\{x\mid f(x)q(x)\equiv 0\}=\{x\mid f(x)\equiv 0\}\cup \{x\mid q(x)\equiv 0\}\),\(p\le (p-n)+s\),即 \(s\ge n\)。则 \(s=n\),证毕。

接下来依托定理 \(2\),二(\(k\))次剩余存在的条件可以被证明。

定理 3

设 \(n\not\mid p-1,p\not\in a\)。

\[x^n\equiv a\pmod p
\]

则此方程有解当且仅当

\[a^{\frac{p-1}n}\equiv 1\pmod p
\]

若有解,有 \(n\) 个解。

证明:

必要性显然。

充分性是某个 WF 选手不会的:

\[x^p-x=x(x^{p-1}-a^{\frac{p-1}n})+x(a^{\frac{p-1}n}-1)\\
=xP(x)(x^n-a)+(a^{\frac{p-1}n}-1)x\\
=xP(x)(x^n-a)+0\\
\]

其中 \(P(x)\) 是整系数多项式。\(xP(x)\) 当然也是。根据以上定理,存在 \(n\) 个解。

对于二次剩余:

\[a^p-1=(a^{\frac{p-1}2}+1)(a^{\frac{p-1}2}-1)\equiv0\pmod p\\
\]

所以 \(a\) 是非二次剩余当且仅当 \(a^{\frac{p-1}2}\equiv -1\pmod p\)。

Cipolla

不难发现 \(\dfrac{p-1}2\) 个数有二次剩余,同样多的数没有。

考虑求解

\[x^2\equiv c\pmod p
\]

所以,可以随机出 \(a\) 使得 \(a^2-c\) 不是二次剩余。此时有 \((a^2-c)^{\frac{p-1}2}\equiv -1\pmod p\)。

对 \(\Z_p\) 环进行代数扩张,变为 \(\C_p\),虚根 \(\omega\) 认为是 \(\omega^2\equiv a^2-c\pmod p\)。

不难发现 \(\omega^p=-\omega\)。

下面证明:\(c=(a+\omega)^{p+1}\)。

根据升幂引理,\((a+\omega)^{p+1}=(a^p+\omega^p)(a+\omega)=(a-\omega)(a+\omega)=c\)。

证毕!

二次剩余和 Cipolla 算法的更多相关文章

  1. 二次剩余Cipolla算法学习笔记

    对于同余式 \[x^2 \equiv n \pmod p\] 若对于给定的\(n, P\),存在\(x\)满足上面的式子,则乘\(n\)在模\(p\)意义下是二次剩余,否则为非二次剩余 我们需要计算的 ...

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

    二次剩余定义: 在维基百科中,是这样说的:如果q等于一个数的平方模 n,则q为模 n 意义下的二次剩余.例如:x2≡n(mod p).否则,则q为模n意义下的二次非剩余. Cipolla算法:一个解决 ...

  3. Cipolla算法学习小记

    转自:http://blog.csdn.net/doyouseeman/article/details/52033204 简介 Cipolla算法是解决二次剩余强有力的工具,一个脑洞大开的算法. 认真 ...

  4. Cipolla算法学习笔记

    学习了一下1个$\log$的二次剩余.然后来水一篇博客. 当$p$为奇素数的时候,并且$(n, p) \equiv 1 \pmod{p}$,用Cipolla算法求出$x^2 \equiv n \pmo ...

  5. 二次剩余的判定及Cipolla算法

    二次剩余 ppp是奇素数.所有的运算都是在群Zp∗Z_{p}^{*}Zp∗​中的运算.方程x2=a≠0x^2=a \neq 0x2=a̸​=0问是否有解,以及解是什么?若有解,aaa就是模ppp的二次 ...

  6. 二次剩余 Cipolla算法

    欧拉准则 \(a\)是\(p\)的二次剩余等价于\(a^{\frac{p-1}{2}}\equiv 1\pmod p\),\(a\)不是\(p\)的二次剩余等价于\(a^{\frac{p-1}{2}} ...

  7. 【模板】【数论】二次剩余Cipolla算法,离散对数BSGS 算法

    Cipolla LL ksm(LL k,LL n) { LL s=1; for(;n;n>>=1,k=k*k%mo) if(n&1) s=s*k%mo; return s; } n ...

  8. [ural1132]Square Root(cipolla算法)

    题意:求${x^2} \equiv n\bmod p$ 解题关键: 定理:若$a$满足$w = {a^2} - n$是模$p$的二次非剩余,即,${x^2} = w\bmod p$无解,则${(a + ...

  9. 数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群)

    数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群) 因为不会做目录所以请善用ctrl+F 本来想的是笔记之类的,写着写着就变成了资源整理 一些有的 ...

  10. 【数论】【二次剩余】【map】hdu6128 Inverse of sum

    部分引用自:http://blog.csdn.net/v5zsq/article/details/77255048 所以假设方程 x^2+x+1=0 在模p意义下的解为d,则答案就是满足(ai/aj) ...

随机推荐

  1. AOP实践:java.lang.instrument的使用

    背景 在 rcjp 项目中,需要调用 ASM API(用于字节码处理的开源库)对字节码进行处理,目标是实现对 Java 程序运行时各种对象的动态跟踪,并进一步分析各个对象之间的关系.在此之前,需要考虑 ...

  2. Python:编程“八荣八耻”之我见

    刚在逛CPyUG时看到了个主题讨论python的八荣八耻,见:http://bit.ly/4jeBor, 主题内容如下: 以动手实践为荣,以只看不练为耻.  以打印日志为荣,以单步跟踪为耻.  以空白 ...

  3. PySAGES实记

    技术背景 PySAGES是一款可以使用GPU加速的增强采样插件,它可以直接对接到OpenMM上进行增强采样分子动力学模拟,这里我们测试一下相关的安装,并尝试跑一个简单的增强采样示例. 安装PySAGE ...

  4. 桌面应用开发之Electron

    Electron 官网: https://www.electronjs.org/ Electron是一个使用JavaScript.HTML和CSS构建跨平台的桌面应用程序.它基于Node.js和Chr ...

  5. golang定时器之timer+ticker

    转载: https://juejin.cn/post/7327157426298011663 Timer 是一个一次性的定时器,用于在未来的某一时刻执行一次操作. 基本使用 创建 Timer 定时器的 ...

  6. 为什么Spring官方不推荐使用 @Autowired?

    前言 很多人刚接触 Spring 的时候,对 @Autowired 绝对是爱得深沉. 一个注解,轻松搞定依赖注入,连代码量都省了. 谁不爱呢? 但慢慢地,尤其是跑到稍微复杂点的项目里,@Autowir ...

  7. 在window 使用 docker 安装redis 踩坑记

    1. 安装REDIS 在安装的时候,使用 docker pull redis 就可以了. 但是 实际上 发现镜像居然拉不下来. 修改了一下 docker 镜像. 配置如下: "registr ...

  8. H5 新增表单

    1.提示占位 placeholder <input type="text" name="userName" placeholder="请输入用户 ...

  9. Kettle用查出来的数据自动创建表

    ​Kettle在表输入的时候,写好很复杂的SQL,有种场景,就是想把这个很复杂的查出来的数据,自动创建一个表. 其实,操作步骤不复杂. 跟着我来做就是了. 1,新建表输出,Shift按住,从表输入拖动 ...

  10. SQLServer单表无缝转换到MySQL

    场景:SQLServer 单表结构,无缝转换到MySQL 方法: 1. Navicat-右键需要导出的数据表-逆向表到模型 2. 弹出来的模型窗口里,选择 转换模型为  默认MySQL8.0 确认 3 ...