二次剩余

news/2024/12/19 21:49:28/文章来源:https://www.cnblogs.com/OIshima/p/18617986

## 二次剩余

> 这东西挺有意思的。

### 问题

> 给定 $n,p$,求方程 $x^2\equiv N \bmod p$ 的解。
>
> 保证 $p$ 是奇素数。

#### 1. 判断一个 $N$ 是否是二次剩余(方程解的个数)

根据费马小定理,对于任意非 $0$ 整数 $x$ 都有 $x^{p-1}\equiv 1\bmod p$。

则 $x^{p-1}\equiv x^{2{\frac{p-1}{2}}}\equiv N^{\frac{p-1}{2}}\equiv 1\bmod p$。

所以 $N$ 为二次剩余的必要条件为为 $N^{\frac{p-1}{2}}\equiv 1\bmod p$。

实际上这个条件是充要的:

已知 $N^{\frac{p-1}{2}}\equiv 1\bmod p$。设原根为 $g$,$N\equiv g^{k}\bmod p$,那么有 $g^{k\frac{p-1}{2}}\equiv 1$,即 $p-1|k\frac{p-1}{2}$。

这说明 $k$ 一定是偶数,那么 $x$ 取 $g^{\frac{k}{2}}$ 就是一个合法解。

- 注意到如果 $N$ 是非二次剩余,那么 $N^{\frac{p-1}{2}}$ 只可能等于 $-1$,因为 $N^{p-1}\equiv 1\bmod p$ 始终成立。

所以当 $N^{\frac{p-1}{2}}\equiv -1\bmod p$ 是方程无解。

否则已知 $x_1=g^{\frac{k}{2}}$ 一定是一个解。

假设方程有多个解,对于其中的两个解 $(x_{1},x_{2})$,有 $x_{1}^2-x_{2}^{2}\equiv 0\bmod p$。

由此可以推出 $(x_{1}+x_{2})(x_{1}-x_{2})\equiv 0\bmod p$。

因为 $x_{1}\neq x_{2}$,所以 $x_{1}+x_{2}\equiv 0$。

**故方程恰好为两个解,一个为 $g^{\frac{k}{2}}$,另一个为 $-g^{\frac{k}{2}}\bmod p$**。

#### 2.求解方程的解 (Cipolla 算法)

考虑先找到一个 $a$ 满足 $a^2-n$ 是非二次剩余。

注意到二次剩余的数量和非二次剩余的数量都是 $\frac{p-1}{2}$(不考虑 $0$),所以期望随机两次就可以找出来。

然后我们需要一个 $c$ 满足 $c^2\equiv a^2-n\bmod p$。但 $a^2-n$ 是非二次剩余,显然在 $[1,p-1]$ 内不存在这样的 $c$。所以考虑拓展到复数域。(注意我们在形式上始终把 $c$ 当做一个整体)

- 定理 $1$:$c^{p}=-c$。

> $c^{p}\equiv c\times c^{2\frac{p-1}{2}}\equiv c\times (a^{2}-n)^{2\frac{p-1}{2}}\equiv -c\bmod p$。

- 定理 $2$:$(A+B)^{p}\equiv A^p+B^p\bmod p$。

> 二项式展开 $(A+B)^{p}\equiv \sum_{i=0}^{p}{p\choose i} A^{i}B^{p-i}\equiv A^{p}+B^{p}\bmod p$。
>
> 因为当 $i\neq0,p$ 时 $p$ 因子必定存在。

结合这两个就可以推出 $(a+c)^{p+1}\equiv (a+c)(a^{p}+c^{p})\equiv (a+c)(a-c)\equiv a^2-c^2\equiv n\bmod p$。

所以 $(a+c)^{\frac{p+1}{2}}$ 就是 $x$ 的解。

那么问题来了,$x$ 如果有虚部不就寄了吗?

不过可以证明 $x$ 一定无虚部。

> 考虑 $(a+c)^{\frac{p+1}{2}}$ 如果是一个复数,记为 $(A+Bc),B\neq 0$。
>
> 那么有 $(A+Bc)^2\equiv n\bmod p$,
>
> 即 $A^2+2ABc-(a^2-n)B^2\equiv n\bmod p$。
>
> 移项可得 $2ABi\equiv n+(a^2-n)B^2-A^2\bmod p$。
>
> 等式右边没有虚部,所以左边也没有,即 $AB\equiv 0$,所以 $A=0$。
>
> 那么就是说 $(Bi)^2\equiv n$,即 $(a^2-n)\equiv nB^{-2}\bmod p$。
>
> 左边是非二次剩余,右边是二次剩余,显然矛盾了。

快速幂求解即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855605.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20222321 2024-2025-1 《网络与系统攻防技术》实验八实验报告

一.实验内容 (1)Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 (2)Web前端javascipt 理解JavaScript的基本功能,理解DOM。 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎…

数量

技巧 比例型 出现一个比例,存在四种倍数关系倍数 你们有啥公因子,我也必须有尾数 出现乘法,分析个位,考虑尾数 。乘法中出现5和10尾数就确认了奇偶 与偶数相乘一定是偶数,与奇数相乘可能为偶数也可能为奇数拓展猜题 当 A = B*C ,求A ,考虑A的倍数 工程问题 利润问题 求最…

LVGL学习 - Visual Studio外部“.c.h”文件添加

LVGL项目工程添加“.c.h”文件后 “C1083”“LNK2019”报错的解决方法一、首先把文件添加至工程,现有项选择所需添加的“.c.h”文件但还是会有如下报错,解决方法在第2步。二、“.c”文件需要添加“extern "C"” 下图截至官方文档我试了只添加“extern "C"…

组合数学+ybt题解

加法原理 乘法原理 排列数 从 \(n\) 个数中任取 \(m\) 个元素的排列的方案数,表示为 \(A^m_n=\frac{n!}{(n-m)!}\) \(0!=1\) 全排列 \(A^n_n\) 组合数 从 \(n\) 个元素中取出 \(m\) 个元素的组合的个数,表示为 \(\dbinom{n}{m}= \frac{A^m_n}{m!}=\frac{n!}{m!(n-m)!}\) 如何…

苍穹外卖day02

JWT令牌、ThreadLocal、分页查询bug记录知识点记录新增员工新增员工需要填写创建人id和修改人id两个属性,这两个属性应该填本账户的id。 通过拦截器可以解析出JWT令牌中包含的登录员工id信息,但是该如何传递给Service的save方法? ThreadLocal并非一个Thread,而是Thread的局…

年底裁员开始了,大家做好准备吧!

各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。 另一面企业招人真的变得容易了吗?有企业HR吐槽,简历确实比以前多了好几倍,其实是变…

2024-2025-1 20241401 《计算机基础与程序设计》 第十三周学习总结

班级链接 2024计算机基础与程序设计作业要求 第十三周作业教材学习内容总结 《C语言程序设计》第12章结构体的定义和使用: 结构体类型的定义,以及结构体变量的创建和使用。结构体允许将不同数据类型的成员组合成一个整体,以便于管理和引用。 结构体变量的初始化: 结构体变量…

golang的互斥锁和读写锁

golang mutex(互斥锁) 1.锁最本质的作用 保证原子性 2.mutex 使用原则 适用于并发编程,尽量减少加锁区域的逻辑 3.mutex的局限性 仅限于单个进程内操作 sema(信号量,semaphore的简称)是一种用于并发控制的机制 资源计数:信号量维护一个资源计数。这个计数表示当前可用的资源数…

「测试人员」年终总结及来年规划

年底一般企业都会针对项目写总结,一般流程是组员呈交给组长,组长递交给测试经理,所以每个层级写各自的总结,会有不同的侧重点。 今天分别来聊聊测试工程师、测试组长以及测试经理年终总结的关注点在什么地方以及采用什么样的方法及策略使年终总结有实际意义且高大上。📝 …

【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

1.算法仿真效果 本文是之前写的文章基于FPGA的2FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR_fpga 2fsk-CSDN博客的硬件测试版本。在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:(…

征程 6 云端 Ota 升级方案设计与实现

01 引言 在开发、调测过程中,经常通过 Ota 技术升级应用软件、底软。目前,项目上已将 Matrix6 的 Demo 部署在实车上,每次软件、底软需要版本更替或版本升级时,都需要研发测试同学上到车上使用工控机进行手动升级。 这流程存在耗费人力多,花费时间长,流程易出错的问题,并…