中国剩余定理

例题

  • 已知以下 n n n同余方程(所有 m i m_i mi​互质):
  • x ≡ a 1 ( m o d m 1 ) x≡a_1(\mod m_1) x≡a1​(modm1​)
  • x ≡ a 2 ( m o d m 2 ) x≡a_2(\mod m_2) x≡a2​(modm2​)
  • x ≡ a 3 ( m o d m 3 ) x≡a_3(\mod m_3) x≡a3​(modm3​)
  • ……
  • x ≡ a n ( m o d m n ) x≡a_n(\mod m_n) x≡an​(modmn​)
  • 求最小的 x x x.

样例

n = 3 n=3 n=3
x ≡ 1 ( m o d 3 ) x≡1(\mod 3) x≡1(mod3)
x ≡ 2 ( m o d 5 ) x≡2(\mod 5) x≡2(mod5)
x ≡ 3 ( m o d 7 ) x≡3(\mod 7) x≡3(mod7)

朴素解法

  • 先找出符合第一条的最小的 x x x,
  • 那么 x = 4 x=4 x=4.
  • 再看使它符合第二条,同时保证第一条成立,每次加上 3 3 3,
  • x = 7 x=7 x=7时,成立,
  • 还要使它满足第三条,同时保证前两条成立,每次加上 g c d ( 3 , 5 ) = 15 gcd(3,5)=15 gcd(3,5)=15,
  • x = 52 x=52 x=52时,成立,
  • 所以最终答案就是 x = 52 x=52 x=52。
  • 这样做非常慢,如果式子太多效率是非常低的。

中国剩余定理

  • 先令 M = Π m i M=\Pi{m_i} M=Πmi​, c i = M m i c_i=\frac{M}{m_i} ci​=mi​M​, c i − 1 c_i^{-1} ci−1​表示 c i c_i ci​在模 m i m_i mi​意义下的乘法逆元,
  • 则答案 A n s = ∑ a i ∗ c i ∗ c i − 1 m o d M Ans=\sum a_i*c_i*c_i^{-1} \mod M Ans=∑ai​∗ci​∗ci−1​modM

证明

  • 只需要证明方程组中每条式子成立即可,
  • 也就是说,证明任意一个 i i i,有 A n s ≡ a i ( m o d m i ) Ans≡a_i(\mod m_i) Ans≡ai​(modmi​)
  • 当 i ≠ j i\neq j i​=j时,有 c i m o d m j = 0 c_i\mod m_j=0 ci​modmj​=0,
  • 所以 A n s ≡ ∑ a j ∗ c j ∗ c j − 1 ≡ a i ∗ c i ∗ c i − 1 ≡ a i ( m o d m i ) Ans≡\sum a_j*c_j*c_j^{-1} ≡a_i*c_i*c_i^{-1}≡a_i(\mod m_i) Ans≡∑aj​∗cj​∗cj−1​≡ai​∗ci​∗ci−1​≡ai​(modmi​)
  • 即该定理成立。

扩展中国剩余定理

例题

  • 已知以下 n n n同余方程(所有 m i m_i mi​互质的条件不存在了):
  • x ≡ a 1 ( m o d m 1 ) x≡a_1(\mod m_1) x≡a1​(modm1​)
  • x ≡ a 2 ( m o d m 2 ) x≡a_2(\mod m_2) x≡a2​(modm2​)
  • x ≡ a 3 ( m o d m 3 ) x≡a_3(\mod m_3) x≡a3​(modm3​)
  • ……
  • x ≡ a n ( m o d m n ) x≡a_n(\mod m_n) x≡an​(modmn​)
  • 求最小的 x x x.

分析

  • 朴素解法仍然适用。
  • 但如果用中国剩余定理的话,不保证互质的情况下,乘法逆元无法求得,
  • 此时需要用别的方法。

扩展中国剩余定理

  • 这里直接用一般的形式来讲解。
  • 先使前两条式子成立,
  • x ≡ a 1 ( m o d m 1 ) x≡a_1(\mod m_1) x≡a1​(modm1​)
  • x ≡ a 2 ( m o d m 2 ) x≡a_2(\mod m_2) x≡a2​(modm2​)
  • 可以变形为:
  • x = m 1 ∗ y 1 + a 1 x=m_1*y_1+a_1 x=m1​∗y1​+a1​
  • x = m 2 ∗ y 2 + a 2 x=m_2*y_2+a_2 x=m2​∗y2​+a2​
  • 则 m 1 ∗ y 1 + a 1 = m 2 ∗ y 2 + a 2 m_1*y_1+a_1=m_2*y_2+a_2 m1​∗y1​+a1​=m2​∗y2​+a2​
  • 变形得到 m 1 ∗ y 1 − m 2 ∗ y 2 = a 2 − a 1 m_1*y_1-m_2*y_2=a_2-a_1 m1​∗y1​−m2​∗y2​=a2​−a1​
  • 式子中的 y 1 y_1 y1​和 y 2 y_2 y2​是未知的,显然可以用扩展欧几里德来求解!
  • 当然要判断 g c d ( m 1 , m 2 ) gcd(m_1,m_2) gcd(m1​,m2​)是否能被 a 2 − a 1 a_2-a_1 a2​−a1​整除,如果不行则是无解的。
  • 当 y 1 y_1 y1​和 y 2 y_2 y2​求出以后,都乘上 ( a 2 − a 1 ) / g c d ( m 1 , m 2 ) (a_2-a_1)/gcd(m_1,m_2) (a2​−a1​)/gcd(m1​,m2​)
  • 求出当前的解 x ′ x' x′.
  • 接着当前的解可以转换成一条新的方程式:
  • x = x ′ ( m o d l c m ( m 1 , m 2 ) ) x=x'(\mod lcm(m_1,m_2)) x=x′(modlcm(m1​,m2​)),
  • 这样继续和下一条方程式合并成一条新的方程式,
  • 当只剩一条方程时, x ′ x' x′就是最终的答案。

代码

#include<cstdio>
#include<cstring>
using namespace std;
#define LL long long
LL a[11],m[11];
LL exgcd(LL a,LL b,LL &x,LL &y)
{if(b==0){x=1;y=0;return a;}LL d=exgcd(b,a%b,x,y);LL t=x;x=y;y=t-a/b*y;return d;
}
int main()
{int n,i;scanf("%d",&n);for(i=1;i<=n;i++) scanf("%lld%lld",&m[i],&a[i]);LL A=a[1],M=m[1];for(i=2;i<=n;i++){LL x=0,y=0;LL l=a[i]-A;LL d=exgcd(M,m[i],x,y);if(l%d>0){printf("-1");return 0;}x*=l/d;x=(x%m[i]+m[i])%m[i];A+=M*x;M=M/d*m[i];A%=M;}printf("%lld",A);return 0;
}

中国剩余定理扩展中国剩余定理 入门详解相关推荐

  1. 中国剩余定理 扩展中国剩余定理 (模板)

    中国剩余定理 && 扩展中国剩余定理 一个整数除以三余二,除以五余三,除以七余二,求这个整数. 例题: 一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K.例如,K % ...

  2. dockerk8s入门详解

    docker&k8s入门详解 一.Docker 1.1 什么是Docker 1.2为什么要使用docker? 1.更快速的交付和部署 2.更高效的虚拟化 3.更轻松的迁移和扩展 4.更简单的管 ...

  3. java servlet 入门_servlet 入门详解

    servlet 入门详解 Servlet是一种服务器端的编程语言,是J2EE中比较关键的组成部分.Servlet本质上也是Java类,编写Servlet需要遵循java的基本语法,但是与一般的Java ...

  4. FFmpeg入门详解之116:rtsp live555摄像头直播

    rtsp+live555摄像头直播 Live555直播流程简介与演示 第一步,读取摄像头数据 第二步,x264编码 第三步,扩展live555 第四步,vlc或ffplay播放 ffplay -sta ...

  5. FFmpeg入门详解之83:流媒体与直播技术

    流媒体 流媒体又叫流式媒体,它是指商家用一个视频传送服务器(比如:vlc)把节目(比如:ande10.mp4)当成数据包发出,传送到网络上.用户通过解压设备对这些数据进行解压后,节目就会像发送前那样显 ...

  6. FFmpeg入门详解之117:视频监控的架构和流程

    几张架构图带您快速了解视频监控 图一 图二 图三 图四 视频监控系统的简介 视频监控 视频监控是安全防范系统的重要组成部分,英文Cameras and Surveillance.传统的监控系统包括前端 ...

  7. FFmpeg入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览

    Qt5+FFmpeg单路网络摄像头采集预览 源码工程:S26_Test4 RTSP协议简介 RTSP(Real Time Streaming Protocol),RFC2326 RTSP(Real T ...

  8. Jetpack Compose入门详解(实时更新)

    Jetpack Compose入门详解 前排提醒 前言(Compose是什么) 1.实战准备 一.优势与缺点 二.前四课 三.标准布局组件 1.Column 2.Row 3.Box 四.xml和com ...

  9. FFmpeg入门详解之111:RTSP协议2

    rtsp消息详解 1.RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同. 请求消息格式: 方法 URI RTSP版本 CR LF 消息头 C ...

  10. SQL注入攻防入门详解

    转载自:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html SQL注入攻防入门详解 =============安全性篇目录= ...

最新文章

  1. 二十二、新人成才之路《做人七项原则 做一个节俭惜福的人》
  2. sql avg函数使用格式_SQL AVG-SQL平均函数用语法示例解释
  3. flask_sqlalchemy 多对多重复插入解决办法
  4. 提升软文营销曝光量可从这几方面着手操作
  5. 单源最短路——dijkstra算法
  6. 实现一个正则表达式引擎in Python(三)
  7. mysql入门到跑路_Mysql入门二十小题(DBA老司机带你删库到跑路)2018.11.26
  8. 算法工程师面试备战笔记4_余弦相似与欧氏距离有什么区别和联系
  9. CentOS7环境下在/离线安装GCC与GCC-C++
  10. Unsupervised Domain Adaptation by Backpropagation
  11. 读《霍乱时期的爱情》第一章有感
  12. 面向对象系列(一)-关键字
  13. 腾讯云折(tian)腾(keng)记
  14. 安装文本编辑器 Geany
  15. 三校生计算机教学计划,第十二
  16. 班加洛尔大部分地区即将兴建别墅
  17. 山西省2022年中级职称(工程师)评定条件及要求
  18. 在家也可以享受购物体验?AR+Scene 帮您实现商品3D展示和虚拟试戴
  19. java上传图片文件
  20. 工作流网(workflow net)

热门文章

  1. 成都理工大学线性代数历年期末试卷题型总结(大题)
  2. VMware 彻底删除虚拟机操作系统
  3. Linux进程隐藏问题————显示隐藏进程
  4. 湖南师范大学计算机网络中心,实验中心-湖南师范大学信息科学与工程学院
  5. 常见遥感卫星参数介绍nbsp;(转)
  6. 361度杭州亚运会官方体育服饰正式发布;“威海海鲜官方旗舰店”揭牌仪式顺利举行 | 知消...
  7. 宝塔控制面板安装禅道开源版教程
  8. 使用R语言包clusterProfiler做KEGG富集分析时出现的错误及解决方法
  9. python基于PHP+MySQL的在线考试系统
  10. XP下超级终端的使用