N次剩余

给定 \(N,a,P\),且 \(P\) 最好为质数
可以算出 \(x^N\equiv a(mod~p)\) 的解
首先可以算出 \(P\) 的原根 \(g\)
解方程 \(g^y\equiv b(mod~p)\),这个直接 \(BSGS\)
设 \(g^z\equiv x(mod~p)\)
那么 \(g^{za}=g^y(mod~p)\iff za\equiv y(mod~\varphi(p))\),这个直接 \(exgcd\)
无解在 \(BSGS\) 和 \(exgcd\) 的时候判掉,最后快速幂得到答案

二次剩余

求 \(x^2\equiv n(mod~p)\)的一个解 \(x\),其中 \(p\) 为一个奇素数

有二次剩余的条件

\[n^{\frac{p-1}{2}} \equiv 1(mod~p)\]

证明

首先有 \(n^{p-1}\equiv 1(mod~p)\)
若存在一个解 \(a\),那么 \(a^{p-1}\equiv 1(mod~p)\) 且 \(a^{2}\equiv n(mod~p)\)
所以
\[a^{p-1}\equiv n^{\frac{p-1}{2}}\equiv 1(mod~p)\]

算法一

如果 \(g\) 为 \(p\) 的原根,且 \(g^{a}\equiv n(mod~p)\) 那么解就是 \(g^{\frac{a}{2}}\)

证明

结合上面的条件,有 \(g^{a\frac{p-1}{2}}\equiv 1(mod~p)\)
因为 \(g^{p-1}\equiv 1(mod~p)\),那么 \(a\) 一定为偶数
可以在 \(\Theta(\sqrt{p})\) 的复杂度内找到解

算法二

随机一个数字 \(a\)
使得 \(a^2-n\) 不存在二次剩余,期望次数为 \(2\)
定义一个新的数域,设 \(\omega = \sqrt{a^2-n}\) (类似于 \(i=\sqrt{-1}\))
那么所有的数都可以表示为 \(a+b\omega\) 的形式
根据有解的条件可以得到
\[\omega^{p-1}\ne 1(mod~p)\]
而 \(\omega^{2(p-1)}\equiv 1(mod~p)\) 所以 \(\omega^{p-1}\equiv -1(mod~p)\)

定理 \((a+\omega)^{p}=a-\omega\)

证明

二项式定理展开得到 \(\sum_{i=0}^{p}\binom{p}{i}a^i\omega^{p-i}\)
显然除了第 \(0\) 项和第 \(p\) 项的组合数不是 \(p\) 的倍数
那么就是 \(a^p+\omega^{p}\)
由于 \(a^{p-1}\equiv 1(mod~p)\) 且 \(\omega^{p-1}\equiv -1(mod~p)\)
那么得到 \(a^p+\omega^{p}=a-\omega\)

这就好了,因为 \((a-\omega)(a+\omega)=a^2-\omega^2=n\)
所以 \((a+\omega)^{\frac{p+1}{2}}\equiv \sqrt{n}(mod~p)\)
现在只要证明 \((a+\omega)^{\frac{p+1}{2}}\) 不存在 \(\omega\) 项就好了
假设 \((a+\omega)^{\frac{p+1}{2}}=x+y\omega\)
那么 \((x+y\omega)^2=n\)
所以 \(x=0\) 或者 \(y=0\)
如果 \(x=0\) 且 \(y\ne0\),那么 \((x+y\omega)^2=y^2(a^2-n)=n\)
因为 \(a^2-n\) 没有二次剩余,而 \(y^2\) 显然有二次剩余
所以 \(n\) 没有二次剩余,矛盾
得到 \(y= 0\)

总结一下

第一步随机一个 \(a\),使得\(a^2-n\) 不存在二次剩余
第二步直接重载运算求出 \((a+\omega)^{\frac{p+1}{2}}\) 即 \(n\) 的二次剩余

N次剩余和二次剩余的更多相关文章

  1. OI数学汇总

    最前面:\(\LaTeX\)可能需要加载一会,请耐心等待o~ 前言 数学在\(\text{OI}\)中十分重要.其中大多都是数论. 什么是数论? \[ 研究整数的理论 --zzq \] 本文包含所有侧 ...

  2. 数学:二次剩余与n次剩余

    二次剩余求的是这个东西 如果给定x,再给定若干个大的质数p,如果结果a相同,那么x是完全平方数? 给出别人的二次剩余的代码: /*poj 1808 题意: 判断平方剩余,即判断(x^2)%p=a是否有 ...

  3. 二次剩余、三次剩余、k次剩余

    今天研究了一下这块内容...首先是板子 #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. android计算每个目录剩余空间丶总空间以及SD卡剩余空间

    ublic class MemorySpaceCheck { /** * 计算剩余空间 * @param path * @return */ public static String getAvail ...

  5. Windows - 性能监控之磁盘剩余空间大小警报

    开始 -> 运行 -> 键入命令 perfmon.msc 数据收集器(Data Collector Sets) -> 用户自定义(User Defined)

  6. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  7. css实现div的高度填满剩余空间

    css实现div的高度填满剩余空间 .top{ width: 100%; height: 70px;} .bottom{background-color: #cc85d9;width: 100%;po ...

  8. 如何实现textarea中获取动态剩余字数的实现

    工作中遇到一个案例,之前没有写过,今儿啃了半个下午硬是给写出来,灰常又成就感!当然对于js大牛来说这根本不算啥,但是对于我自己的js能力又向前迈出一小步. 案例介绍:我们常见到有的网站有textare ...

  9. sql 查询服务器硬盘剩余空间

    DECLARE @tb1 Table( drive varchar(20), [MB 可用空间] varchar(20)) INSERT INTO @tb1 Exec master.dbo.xp_fi ...

随机推荐

  1. python os用法详解

    前言:在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块,所以今天整理下比 ...

  2. 极其简单的用JS在浏览器中创建下载文件的方法

    有这样一个需求,在js中动态创建一个页面,然后下载该页面为word文档,研究了一上午,最后发现实现起来如此简单. 在js中创建如下方法:(直接复制即可) function downloadFile(f ...

  3. Working with Metal—Overview

    看完这个 WWDC 之后的总结. Metal 可以在单位时间内提供 10 倍的 draw call 调用. Background About Draw Call 每一次 draw call 调用都必须 ...

  4. 调用jdbc已经写成的方法----jdbc工具类抽取方式一

    package web09; /*获取连接和释放资源的方法 */ import java.sql.Connection; import java.sql.DriverManager; import j ...

  5. iOS中生成随机的UUID

    + (NSString *)uuidString { CFUUIDRef uuid_ref = CFUUIDCreate(NULL); CFStringRef uuid_string_ref= CFU ...

  6. 递归实现进制转换(C++版)

    上次呢,我们留下了一道题,今天我们来一起看一看: 题目链接:https://www.cnblogs.com/gaozirong/p/10547434.html 这是我写的程序,大家可以对照参考一下(C ...

  7. Machine learning第四周code 编程作业

    1.lrCostFunction: 和第三周的那个一样的: function [J, grad] = lrCostFunction(theta, X, y, lambda) %LRCOSTFUNCTI ...

  8. github访问慢加速访问

    实测从1kb到了1m多 方法: 登录 https://www.ipaddress.com/ 输入github.com得到一个或两个IP地址 输入github.global.ssl.fastly.net ...

  9. hdu1024 Max Sum Plus Plus 滚动dp

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  10. notepad++中配置python运行命令

    1.安装notepad++ 2.打开notepad++ 3.键盘上按下“F5”,在弹出的命令菜单中输入“cmd /k C:\Python30\python.exe "$(FULL_CURRE ...