二次剩余和 Cipolla 算法
首先是素数模同余方程的相关理论。
下设 $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\)。则
\]
其中 \(\deg g=n-k,[x^{n-k}]g(x)=a_n\)。
归纳法不难证明此命题。
可以推出威尔逊定理。
定理 1 Lagrange 定理
\]
至多具有 \(n\) 个不同解。
证明:
设其具有解 \(x_1\sim x_{n+1}\),则有
\]
取 \(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\),满足:
\]
证明:
首先证明必要性。若 \(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\)。
\]
则此方程有解当且仅当
\]
若有解,有 \(n\) 个解。
证明:
必要性显然。
充分性是某个 WF 选手不会的:
=xP(x)(x^n-a)+(a^{\frac{p-1}n}-1)x\\
=xP(x)(x^n-a)+0\\
\]
其中 \(P(x)\) 是整系数多项式。\(xP(x)\) 当然也是。根据以上定理,存在 \(n\) 个解。
对于二次剩余:
\]
所以 \(a\) 是非二次剩余当且仅当 \(a^{\frac{p-1}2}\equiv -1\pmod p\)。
Cipolla
不难发现 \(\dfrac{p-1}2\) 个数有二次剩余,同样多的数没有。
考虑求解
\]
所以,可以随机出 \(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 算法的更多相关文章
- 二次剩余Cipolla算法学习笔记
对于同余式 \[x^2 \equiv n \pmod p\] 若对于给定的\(n, P\),存在\(x\)满足上面的式子,则乘\(n\)在模\(p\)意义下是二次剩余,否则为非二次剩余 我们需要计算的 ...
- 二次剩余定理及Cipolla算法入门到自闭
二次剩余定义: 在维基百科中,是这样说的:如果q等于一个数的平方模 n,则q为模 n 意义下的二次剩余.例如:x2≡n(mod p).否则,则q为模n意义下的二次非剩余. Cipolla算法:一个解决 ...
- Cipolla算法学习小记
转自:http://blog.csdn.net/doyouseeman/article/details/52033204 简介 Cipolla算法是解决二次剩余强有力的工具,一个脑洞大开的算法. 认真 ...
- Cipolla算法学习笔记
学习了一下1个$\log$的二次剩余.然后来水一篇博客. 当$p$为奇素数的时候,并且$(n, p) \equiv 1 \pmod{p}$,用Cipolla算法求出$x^2 \equiv n \pmo ...
- 二次剩余的判定及Cipolla算法
二次剩余 ppp是奇素数.所有的运算都是在群Zp∗Z_{p}^{*}Zp∗中的运算.方程x2=a≠0x^2=a \neq 0x2=a̸=0问是否有解,以及解是什么?若有解,aaa就是模ppp的二次 ...
- 二次剩余 Cipolla算法
欧拉准则 \(a\)是\(p\)的二次剩余等价于\(a^{\frac{p-1}{2}}\equiv 1\pmod p\),\(a\)不是\(p\)的二次剩余等价于\(a^{\frac{p-1}{2}} ...
- 【模板】【数论】二次剩余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 ...
- [ural1132]Square Root(cipolla算法)
题意:求${x^2} \equiv n\bmod p$ 解题关键: 定理:若$a$满足$w = {a^2} - n$是模$p$的二次非剩余,即,${x^2} = w\bmod p$无解,则${(a + ...
- 数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群)
数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群) 因为不会做目录所以请善用ctrl+F 本来想的是笔记之类的,写着写着就变成了资源整理 一些有的 ...
- 【数论】【二次剩余】【map】hdu6128 Inverse of sum
部分引用自:http://blog.csdn.net/v5zsq/article/details/77255048 所以假设方程 x^2+x+1=0 在模p意义下的解为d,则答案就是满足(ai/aj) ...
随机推荐
- Elasticsearch之基本使用
这里大概解答下各个目录.配置文件的作用: 目录 配置文件 描述 bin 放置脚本文件,如启动脚本 elasticsearch, 插件安装脚本等. config elasticserch.yml e ...
- 【朝花夕拾】蓝牙&WiFi常识篇
一.蓝牙常识点 1.常见英文缩写 缩写 英文全称 释义 BLE Bluetooth Low Energy 低功耗蓝牙 BR Basic Rate 基本速率,一般说的经典蓝牙就是指BR/EDR EDR ...
- 一个关于CountDownLatch的并发需求
需求 A,B,C可并发运行,全部成功才算成功,一个失败全员回滚. 思考 使用CountDownLatch,可以保证三个线程结束后,才进行提交成功状态.但是怎么才能判断某个任务失败了呢? 捕获子线程异常 ...
- mac通过网线连接主机(fnOS)
一.mac端 mac是typec的,用了个转接头+网线直连主机,初始化的时候跟下面一致,默认都是自动的 点击详细信息,配置IPv4选择使用DHCP 二.主机端 主机端是最麻烦的,刚开始的时候怎么也找不 ...
- 德承工控机DA-1000 RS-485串口设置
由于一般情况下调试串口常使用RS-485转USB接口来进行调试,但是USB接口在长时间的调试下,接口容易松动,通讯也比较不稳定容易中断,所以改为DB9接口的RS-485来调试,稳固不松脱.抗干扰能力强 ...
- 使用arcpy向server端发布服务
import arcpy import os # Set output file names outdir = r"D:" service = "MapImageShar ...
- R数据分析:临床研究样本量计算、结果解读与实操
很久之前给大家写过一篇文章详细介绍了样本量计算的底层逻辑,不过那篇文章原理是依照卡方比较来写的,可以拓展到均值比较,但视角还是比较小,今天从整个临床研究的角度结合具体的例子谈谈大家遇到的样本量的计算方 ...
- Qt/C++音视频开发73-高效滤镜/文字水印/图形水印/图片水印/yolo运算后的结果显示到画面中
一.前言 视频监控系统发展到今天,越来越智能,比如这些年流行的人脸识别.物体识别.烟感识别等,都是需要拿到图片数据去做运算处理,然后将结果显示到视频画面中,或者还有要求将结果保存到视频录像文件中,以便 ...
- Qt编写可视化大屏电子看板系统26-模块4模具进度
一.前言 模具进度主要用来展示不同的模具类别加工进度,表格的形式展示,显示内容包括模具编号.版本号.类型.状态.产品名称.计划交期.当前进度,其中进度条采用自定义控件三态进度条,有三种状态显示进度:右 ...
- error C1083: 无法打开包括文件:“iostream.h”: No such file or directory
用VS2010打开VC++6程序,按下F5键会发现有错误提示:error C1083: 无法打开包括文件:"iostream.h": No such file or directo ...