[学习笔记] 二次剩余

二次剩余

对于素数 ppp 和数 aaa,满足 (a,p)=1(a,p)=1(a,p)=1。(注意 aaa 不一定小于 ppp

∃xx2≡a(modp)\exist_{x}\ x^2\equiv a\pmod px x2a(modp),则称 aaa 是模 ppp 意义下的二次剩余,xxx 称为该二次剩余方程式的解。

否则称 aaa 是模 ppp 意义下的非二次剩余。

特判掉 p=2p=2p=2 的情况,接下来默认 ppp 均为非 222 质数,即奇素数。

勒让德符号

定义:
(ap)={0p∣a1a在(modp)意义下是二次剩余−1a在(modp)意义下不是二次剩余\Big(\frac{a}{p}\Big)= \begin{cases} 0\quad\quad\quad p\ \big|\ a\\ 1\quad\quad\quad a在\pmod p意义下是二次剩余\\ -1\quad\quad\ a在\pmod p意义下不是二次剩余 \end{cases} (pa)=0p  a1a(modp)1 a(modp)

欧拉准则

(ap)≡ap−12(modp)\Big(\frac ap\Big)\equiv a^{\frac{p-1}2}\pmod p (pa)a2p1(modp)

证明:

  • p∣ap\ \big|\ ap  a。显然成立。

  • aaa 是在模 ppp 意义下的二次剩余。

    ∃xx2≡a(modp)\exist_x\ x^2\equiv a\pmod px x2a(modp)

    (x2)p−12≡ap−12(modp)⇔xp−1≡ap−12(modp)(x^2)^\frac{p-1}2\equiv a^\frac{p-1}2\pmod p\Leftrightarrow x^{p-1}\equiv a^\frac{p-1}2\pmod p(x2)2p1a2p1(modp)xp1a2p1(modp)

    ∵(a,p)=1∴(x,p)=1\because (a,p)=1\therefore(x,p)=1(a,p)=1(x,p)=1

    ⇒xp−1≡1≡ap−12(modp)\Rightarrow x^{p-1}\equiv 1\equiv a^\frac{p-1}2\pmod pxp11a2p1(modp)

  • aaa 在模 ppp 意义下不是二次剩余。

    则有 ∀i∈[1,p)ij≡a(modp)\forall_{i\in [1,p)}\ ij\equiv a\pmod pi[1,p) ija(modp)jjj 是唯一的,且 j≠ij\neq ij=i

    考虑用证明逆元唯一的思路来证明这里的唯一性。反证法。

    假设 0<j1<j2<p0<j_1<j_2<p0<j1<j2<p 满足 ij1≡ij2≡a(modp)ij_1\equiv ij_2\equiv a\pmod pij1ij2a(modp)

    i(j2−j1)≡0(modp)⇒p∣i(j2−j1)i(j_2-j_1)\equiv 0\pmod p\Rightarrow p\ \big|\ i(j_2-j_1)i(j2j1)0(modp)p  i(j2j1)

    (i,p)=1⇒p∣(j2−j1)(i,p)=1\Rightarrow p\ \big|\ (j_2-j_1)(i,p)=1p  (j2j1),与 0<j2−j1<p⇒(j2−j1,p)=10<j_2-j_1<p\Rightarrow (j_2-j_1,p)=10<j2j1<p(j2j1,p)=1 矛盾。

    p−1p-1p1 是偶数,那么我们考虑可以把这些数两两配对,配出 p−12\frac{p-1}22p1 对。

    ap−12≡(p−1)!≡−1(modp)a^\frac{p-1}2\equiv (p-1)!\equiv -1\pmod pa2p1(p1)!1(modp)(威尔逊定理)。


换言之:

x2≡a(modp),(a,p)=1x^2\equiv a\pmod p,(a,p)=1x2a(modp),(a,p)=1

ap−12≡±1(modp)a^\frac{p-1}2\equiv \pm 1\pmod pa2p1±1(modp)

方程有解当且仅当 ap−12≡1(modp)a^\frac{p-1}{2}\equiv 1\pmod pa2p11(modp)

Cipolla

lemma :设 ω\omegaω 不是模 ppp 的二次剩余,即 ̸∃xx2≡ω(modp)\not\exist_x\ x^2\equiv \omega\pmod px x2ω(modp),且 ω=t2−a\omega=t^2-aω=t2a。则 x=(t+ω)p+12x=(t+\sqrt{\omega})^\frac{p+1}2x=(t+ω)2p+1 是二次剩余方程 x2≡a(modp)x^2\equiv a\pmod px2a(modp) 的解。

证明:

(t+ω)p=∑i=0p(pi)ti(ω)p−i=tp+ωp2+∑i=1p−1(pi)ti(ω)p−i(t+\sqrt\omega)^p=\sum_{i=0}^{p}\binom pit^i(\sqrt\omega)^{p-i}=t^p+\omega^\frac{p}2+\sum_{i=1}^{p-1}\binom pit^i(\sqrt\omega)^{p-i}(t+ω)p=i=0p(ip)ti(ω)pi=tp+ω2p+i=1p1(ip)ti(ω)pi

i∈(0,p),(pi)=p!i!(p−i)!i\in(0,p),\binom{p}{i}=\frac{p!}{i!(p-i)!}i(0,p),(ip)=i!(pi)!p!

组合数是整数,i!,(p−i)!i!,(p-i)!i!,(pi)! 里的每个数都 <p<p<p,又 ppp 是奇素数,所以 i!,(p−i)!i!,(p-i)!i!,(pi)! 里面均不会筛到 ppp

所以 p∣(pi)p\ \big|\ \binom pip  (ip)。也就是说后面的求和在模 ppp 意义下是 000

⇒(t+ω)p≡tp+(ω)p(modp)\Rightarrow (t+\sqrt\omega)^p\equiv t^p+(\sqrt\omega)^p\pmod p(t+ω)ptp+(ω)p(modp)

tp+(ω)p=tp+ωp−12ωt^p+(\sqrt\omega)^p=t^p+\omega^\frac{p-1}2\sqrt\omegatp+(ω)p=tp+ω2p1ω,因为 ω\omegaω 不是模 ppp 意义下的二次剩余,所以 (ωp)=−1=ωp−12\Big(\frac \omega p\Big)=-1=\omega^\frac{p-1}2(pω)=1=ω2p1tp=tp−1t≡t(modp)t^p=t^{p-1}t\equiv t\pmod ptp=tp1tt(modp)

⇒(t+ω)p≡t−ω(modp)\Rightarrow (t+\sqrt\omega)^p\equiv t-\sqrt\omega\pmod p(t+ω)ptω(modp)

x2≡(t+ω)p+1≡(t+ω)p(t+ω)≡(t−ω)(t+ω)≡t2−ω≡a(modp)x^2\equiv (t+\sqrt\omega)^{p+1}\equiv(t+\sqrt\omega)^p(t+\sqrt\omega)\equiv(t-\sqrt\omega)(t+\sqrt\omega)\equiv t^2-\omega\equiv a\pmod px2(t+ω)p+1(t+ω)p(t+ω)(tω)(t+ω)t2ωa(modp)

在算法实现中,随机 ttt 后求 ω\omegaω,大约有一半的数都是非二次剩余。期望两次便可求出 xxx


考虑另一种二次剩余方程:x2≡a(modpn)x^2\equiv a\pmod {p^n}x2a(modpn),其中 (a,p)=1(a,p)=1(a,p)=1ppp 为奇质数。

先求出 x2≡a(modp)x^2\equiv a\pmod px2a(modp) 的一个解 τ\tauτ,有 τ2−a=kp⇒(τ2−a)n≡knpn≡0(modpn)\tau^2-a=kp\Rightarrow (\tau^2-a)^n\equiv k^np^n\equiv 0\pmod {p^n}τ2a=kp(τ2a)nknpn0(modpn)

{(r+a)n=f+ga(r−a)n=f−ga\begin{cases}(r+\sqrt a)^n=f+g\sqrt{a}\\(r-\sqrt a)^n=f-g\sqrt{a}\end{cases}{(r+a)n=f+ga(ra)n=fga

两个式子的结果答案长相一定可以这么写。

证明:二项式定理展开 (ni)τn−i(±a)i\binom ni\tau^{n-i}(\pm\sqrt{a})^i(in)τni(±a)i(±a)i(\pm\sqrt{a})^i(±a)i 如果 iii 是偶数,第 iii 项就在 fff 里面,否则就在 ggg 里面。

也就是说,(τ2−a)n≡[(τ+a)(τ−a)]n≡(τ+a)n(τ−a)n≡(f+ga)(f−ga)≡f2−g2a≡0(modpn)(\tau^2-a)^n\equiv [(\tau+a)(\tau-a)]^n\equiv(\tau+a)^n(\tau-a)^n\equiv(f+g\sqrt{a})(f-g\sqrt{a})\equiv f^2-g^2a\equiv 0\pmod {p^n}(τ2a)n[(τ+a)(τa)]n(τ+a)n(τa)n(f+ga)(fga)f2g2a0(modpn)

(f,p)=1,(g,p)=1⇒f2inv(g2)≡a(modn)(f,p)=1,(g,p)=1\Rightarrow f^2\text{inv}(g^2)\equiv a\pmod n(f,p)=1,(g,p)=1f2inv(g2)a(modn)

由于 pnp^npn 不是质数,所以用 exgcd\text{exgcd}exgcd 求逆元即可。

代码

#include <cstdio>
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
#define int long long
int T, n, p, omega;
mt19937 wwl(time(0));struct complex {int x, y;complex(){}complex( int X, int Y ) { x = X, y = Y; }complex operator * ( complex v ) {int ansx = ( x * v.x % p + y * v.y % p * omega % p ) % p;int ansy = ( x * v.y % p + y * v.x % p ) % p;return complex( ansx, ansy );}
};int qkpow( complex x, int y ) {complex ans( 1, 0 );while( y ) {if( y & 1 ) ans = ans * x;x = x * x;y >>= 1;}return ans.x;
}int qkpow( int x, int y, int mod ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans;
}int cipolla( int n, int p ) {n %= p;if( p == 2 ) return n;if( qkpow( n, p - 1 >> 1, p ) == p - 1 ) return -1;int t;while( 1 ) {t = wwl() % p;omega = ( ( t * t % p - n ) % p + p ) % p;if( qkpow( omega, p - 1 >> 1, p ) == p - 1 ) break;}complex ans( t, 1 );return qkpow( ans, p + 1 >> 1 );
}signed main() {scanf( "%lld", &T );while( T -- ) {scanf( "%lld %lld", &n, &p );if( n == 0 ) { puts("0"); continue; }int ans = cipolla( n, p );if( ! ~ ans ) { puts("Hola!"); continue; }if( ans == p - ans ) printf( "%lld\n", ans );else printf( "%lld %lld\n", min( ans, p - ans ), max( ans, p - ans ) );}return 0;
}

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

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

相关文章

Script Lab 续:为 Officejs 开发配置 VSCode 环境

垫场AA&#xff1a;深度&#xff1a;从 Office 365 新图标来看微软背后的设计新理念--------------------------------------------------前期01&#xff1a;尝试&#xff1a;Script Lab&#xff0c;快速 Office 365 开发工具前期02&#xff1a;尝试&#xff1a;Script Lab&…

P3567 [POI2014]KUR-Couriers

P3567 [POI2014]KUR-Couriers 题意&#xff1a; 给一个长度为 n 的正整数序列 a。共有 m 组询问&#xff0c;每次询问一个区间 [l,r] &#xff0c;是否存在一个数在 [l,r]中出现的次数严格大于一半。如果存在&#xff0c;输出这个数&#xff0c;否则输出 0。 题解&#xff1…

[WC 2022 Day3 zmy] Od deski do deski(dp)

设 fi:1∼if_{i}:1\sim ifi​:1∼i 能否分成若干个首尾相同的区间 则有 fiORj<i(fj−1∧ajai)f_{i}\text{OR}_{j<i}(f_{j-1}\wedge a_ja_i)fi​ORj<i​(fj−1​∧aj​ai​)。 这是最原始的暴力 dpdpdp&#xff0c;时间 O(n2m)O(n^2m)O(n2m)。 事实上&#xff0c;这…

编程方式重启 ASP.NET Core 网站

点击上方蓝字关注“汪宇杰博客”常言道&#xff0c;多喝热水&#xff0c;重启试试。有时候当应用工作不正常&#xff0c;重启也许能解决问题。但是程序员通常接触不到服务器系统权限。而运维人员和公司流程经常人为制造麻烦阻止我们去重启应用。老实的程序员不善言辞交际&#…

可持久化3--可持久化01Trie

01Trie 可持久化 01Trie 的方式和可持久化值域线段树的方式是相似的&#xff0c;只是以 01字典树 的方式来维护值域。一般用来解决异或相关的能够按位贪心的题目。 其实就是将可持久化线段树中的操作嫁接到01Trie中&#xff0c;这样就是解决任意一个区间内的问题。 例题&…

AGC044E Pandom Pawn(期望+凸包)

最开始我们先旋转一下这张桌子&#xff0c;使得 A1An1max⁡{Ai}A_1A_{n1}\max\{A_i\}A1​An1​max{Ai​}。 这是非常有效的&#xff0c;因为我们把环就变成链&#xff0c;只要到达了链的任意一端 1/n11/n11/n1 就肯定会结束游戏。 定义 Ei:E_i:Ei​: 从 iii 开始游戏&#xf…

.NET Core 容器化调查

前几天在微信朋友圈做了一个简单的调查&#xff0c;参与人数有500人&#xff0c;调查结果如下&#xff1a;使用K8S的比例非常类似于2017年初我在公众号里针对.NET Core的使用情况的比例。.NET Core是针对云原生应用开发而重新设计的一个平台&#xff0c;.NET Core借鉴了.NET Fr…

P4735 最大异或和

P4735 最大异或和 题意&#xff1a; 一个非负序列a&#xff0c;初始长度为n&#xff0c;有两种操作&#xff1a; A x&#xff0c;在序列中添加x&#xff0c;n加一Q l r x,询问操作&#xff0c;询问一个位置p&#xff0c;p满足l<p<r,使得p到位置n的的异或和与x的异或值…

[学习笔记] 单位根反演

单位根反演 [k∣n]1k∑i0k−1ωkin[k\mid n]\frac 1k\sum_{i0}^{k-1}\omega_k^{in}[k∣n]k1​∑i0k−1​ωkin​ kkk 次单位根是 kkk 次幂为 111 的复数解 wkw_kwk​。利用单位圆和单位根的关系很容易证明。 k∣nk\mid nk∣n 显然 ωkin\omega_k^{in}ωkin​&#xff0c;相当于…

NET Core微服务之路:再谈分布式系统中一致性问题分析

前言一致性&#xff1a;很多时候表现在IT系统中&#xff0c;通常在分布式系统中&#xff0c;必须&#xff08;或最终&#xff09;为多个节点的数据保持一致。世间万物&#xff0c;也有存在相同的特征或相似&#xff0c;比如儿时的双胞胎&#xff0c;一批工厂流水线的产品&#…

P4592 [TJOI2018]异或

P4592 [TJOI2018]异或 题意&#xff1a; 现在有一颗以 1 为根节点的由 n 个节点组成的树&#xff0c;节点从 1 至 n 编号。树上每个节点上都有一个权值 vi。现在有 q 次操作&#xff0c;操作如下&#xff1a; 1 x z&#xff1a;查询节点 x 的子树中的节点权值与 z 异或结果的…

[HAOI2018] 染色(二项式反演+NTT)

洛谷链接 显然颜色数量不会超过 lim⁡min⁡(m,ns)\lim\min(m,\frac ns)limmin(m,sn​) fi:f_i:fi​: 至少有 iii 种颜色恰好出现了 sss 次的方案数。 则 fi(mi)⋅n!(s!)i(n−is)!⋅(m−i)n−isf_i\binom mi\frac{n!}{(s!)^i(n-is)!}(m-i)^{n-is}fi​(im​)⋅(s!)i(n−is)!n!​…

使用 Nexus3镜像搭设私有仓库(Bower 、Docker、Maven、npm、NuGet、Yum、PyPI)

Docker - 使用 Nexus3 搭设私有 NuGet 仓库Nexus 默认帐号Repositories上传组件包(Package)Repositories 说明准备 Package上传 Package使用 Package拉取 Nexus 镜像运行 NexusNuGetNexus 私有仓库前言说明安装Nexus NuGet 仓库简单使用总结前言NuGetNuget 是免费、开源的包管理…

P3293 [SCOI2016]美味

P3293 [SCOI2016]美味 题意&#xff1a; 有n个数组a&#xff0c;现在有m个询问&#xff0c;每次给出一个b和x&#xff0c;问b xor (a[i] x)的最大值是多少&#xff1f; 题解&#xff1a; 不难看出01Trie的题目 我们设ansa[i]x,我们想要b xor ans的最大值&#xff0c;这个很…

[HNOIAHOI2018] 转盘(线段树维护单调栈)

problem 洛谷链接 solution 结论&#xff1a;最优方案中一定有一种是全程不停的。 断环成链&#xff0c;接一个 [1,n][1,n][1,n] 在后面形成 2n2n2n 的序列&#xff0c;同时将时间戳逆过来。 转化成&#xff1a;在 ttt 时刻从某个位置 i∈[n,2n)i\in[n,2n)i∈[n,2n) 开始往…

P2446 [SDOI2010]大陆争霸

P2446 [SDOI2010]大陆争霸 题意&#xff1a; n个点&#xff0c;m个边&#xff0c;wi为每个边的边权&#xff0c;对于每个点i&#xff0c;其被l个点保护着&#xff0c;也就是如果保护其的点没有被破坏&#xff0c;点i无法被破坏(也无法经过其前往其他点)。现在从1出兵(无限数量…

EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽

DbContextPool 是 ASP.NET Core 2.1 引入的新特性&#xff0c;可以节省创建 DbContext 实例的开销&#xff0c;但没有想到其中藏着一个小坑。最近有一个 ASP.NET Core 项目持续运行一段时间后日志中就会出现数据库连接池达到最大连接数限制的错误&#xff1a;System.InvalidOpe…

AtCoder4505 [AGC029F] Construction of a tree(二分图+网络流+dfs+构造)

problem 洛谷链接 solution 考虑 Ω{E1,...,En−1}\Omega\{E_1,...,E_{n-1}\}Ω{E1​,...,En−1​} 的一个子集 SSS&#xff0c;记 f(S){u∣u∈Ei∈S}f(S)\{u\mid u\in E_i\in S\}f(S){u∣u∈Ei​∈S}。 显然当 S≠∅∧∣f(S)∣≤∣S∣S\ne\empty\wedge\big|f(S)\big|\le |…

P2447 [SDOI2010]外星千足虫

P2447 [SDOI2010]外星千足虫 题意&#xff1a; 有n个未知数 给你一个m行n1列的式子&#xff0c;对于每行&#xff0c;1到n列为这个n个未知数的系数&#xff0c;第n1列为该行式子的和mod2&#xff0c;问n个未知数是否有唯一解&#xff0c;并输出&#xff0c;并输出最少需要前k…

Kubernetes架构为什么是这样的?

小编序&#xff1a;在上周发布的《从“鸿沟理论”看云原生&#xff0c;哪些技术能够跨越鸿沟&#xff1f;》一文中&#xff0c;灵雀云CTO陈恺表示&#xff1a;Kubernetes在云计算领域已经成为既定标准&#xff0c;进入主流市场&#xff0c;最新版本主要关注在稳定性、可扩展性方…