中国剩余定理

有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

求满足以下条件的整数:除以3余2,除以5余3,除以7余2。
该问题最早见于《孙子算经》中,并有该问题的具体解法。
宋朝数学家秦九韶于 1247 年《数书九章》卷一、二《大衍类》对「物不知数」问题做出了完整系统的解答。

上面具体问题的解答口诀由明朝数学家程大位在《算法统宗》中给出:
三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五便得知。 2 × 70 + 3 × 21 + 2 × 15 = 233 = 2 × 105 + 23 2×70+3×21+2×15=233=2×105+23 2×70+3×21+2×15=233=2×105+23,故答案为 23. 23. 23.

问题1.计算一个整数 x x x,使得它满足除以3余2,除以5余3、除以7余2。
如果能够找到三个整数 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,使得:

x 1 x_1 x1​除以3余2、除以5余0、除以7余0;
x 2 x_2 x2​除以3余0、除以5余3、除以7余0;
x 3 x_3 x3​除以3余2、除以5余0、除以7余2;

仅 x = x 1 + x 2 + x 3 x=x_1+x_2+x_3 x=x1​+x2​+x3​,就很容易验证 x x x满足除以3余2,除以5余3、除以7余2.

对问题1-1继续分解,哪果能找到一个整数 y 1 y_1 y1​使得 y 1 y_1 y1​除以3余1,除以5余0、除以7余为0.
令 x 1 = 2 ∗ y 1 x_1=2*y_1 x1​=2∗y1​, x 1 x_1 x1​满足除以3余2,除以5余0,除以7为0.
简单证明:

{ y 1 ≡ 0 ( m o d 35 ) y 1 ≡ 1 ( m o d 3 ) \begin{cases} y_1\equiv 0 (mod\ 35) \\y_1\equiv 1 (mod\ 3) \end{cases} {y1​≡0(mod 35)y1​≡1(mod 3)​
可得到 35 y 1 ≡ 1 ( m o d 3 ) . 35y_1\equiv 1(mod 3). 35y1​≡1(mod3).
由同余的性质【设c与m互素,则 a≡b(mod m)↔ca≡cb(mod m)】可得:
2与3互素,可以得到 35 ⋅ y 1 ≡ 1 ( m o d 3 ) ↔ 35 ⋅ 2 ⋅ y 1 ≡ 1 ⋅ 2 ( m o d m ) . 35\cdot y_1\equiv1(mod \ 3)\leftrightarrow 35\cdot2\cdot y_1 \equiv 1\cdot2(mod \ m). 35⋅y1​≡1(mod 3)↔35⋅2⋅y1​≡1⋅2(mod m).
x 1 = 2 y 1 x_1=2y_1 x1​=2y1​得证。

如果求出 y 1 y_1 y1​,那么就可以求出 x 1 x_1 x1​,再以同样的方法求出 x 2 , x 3 x_2,x_3 x2​,x3​,那么 x x x的值也就求出来了。

设 y 1 y_1 y1​为除以3余1,除以5余0,除以7余0的解;
设 y 2 y_2 y2​为除以3余0,除以5余1,除以7余0的解;
设 y 3 y_3 y3​为除以3余0,除以5余0,除以7余1的解。

如果找到了 y 1 , y 2 , y 3 y_1,y_2,y_3 y1​,y2​,y3​,那么 x = 2 ∗ y 1 + 3 ∗ y 2 + 2 ∗ y 3 . x=2*y_1+3*y_2+2*y_3. x=2∗y1​+3∗y2​+2∗y3​.

以求 y 1 y_1 y1​为例,已知 y 1 y_1 y1​除以3余1、除以5余0、除以7余0,那么 y 1 y_1 y1​必然整除35,设 y 1 = 35 k y_1=35k y1​=35k
于是我们只需要求同余方程 35 ⋅ k ≡ 1 ( m o d 3 ) 35\cdot k\equiv 1(mod 3) 35⋅k≡1(mod3)的解,这是的 y 1 y_1 y1​是 5 ∗ 7 5*7 5∗7 模3的逆元,记作 [ 3 5 − 1 ] 3 [35_{-1}]_3 [35−1​]3​.求解此同余方程的最小正整数解 k = 2 k=2 k=2.
解得: y 1 = 35 ⋅ k = 5 ∗ 7 ∗ [ ( 5 ∗ 7 ) − 1 ] 3 y_1=35\cdot k=5*7*[(5*7)^{-1}]_3 y1​=35⋅k=5∗7∗[(5∗7)−1]3​

按照同样的方式求出 y 2 y_2 y2​和 y 3 y_3 y3​:
y 2 = 3 ∗ 7 ∗ [ ( 3 ∗ 7 ) − 1 ] 5 = 3 ∗ 7 ∗ 1 = 21. y_2=3*7*[(3*7)^{-1}]_5=3*7*1=21. y2​=3∗7∗[(3∗7)−1]5​=3∗7∗1=21.
y 3 = 3 ∗ 5 ∗ [ ( 3 ∗ 5 ) − 1 ] 3 = 3 ∗ 5 ∗ 1 = 15. y3=3*5*[(3*5)^{-1}]_3=3*5*1=15. y3=3∗5∗[(3∗5)−1]3​=3∗5∗1=15.

那么 x x x的值为:
x = 2 ∗ ( 5 ∗ 7 ∗ [ ( 5 ∗ 7 ) − 1 ] 3 ) + 3 ∗ ( 3 ∗ 7 ∗ [ ( 3 ∗ 7 ) − 1 ] 5 ) + 2 ∗ ( 3 ∗ 5 ∗ [ ( 3 ∗ 5 ) − 1 ] 3 ) x=2*(5*7*[(5*7)^{-1}]_3)+3*(3*7*[(3*7)^{-1}]_5)+2*(3*5*[(3*5)^{-1}]_3) x=2∗(5∗7∗[(5∗7)−1]3​)+3∗(3∗7∗[(3∗7)−1]5​)+2∗(3∗5∗[(3∗5)−1]3​)
x = 2 × 70 + 3 × 21 + 2 × 15 = 233. x=2×70+3×21+2×15=233. x=2×70+3×21+2×15=233.
最后 ,注意到,如果 x x x满足除以3余2、除以5余3、除以7余2,那么 x + 105 x+105 x+105也同样满足。

因此要计算满足要求的最小的非负整数,就只需要计算总和除以105的余数即可,即 x = 23 x=23 x=23,通解为 x ≡ 23 ( m o d 105 ) . x\equiv 23(mod \ \ 105). x≡23(mod  105).

最后,我们再来总结一下中国剩余定理的定义:
假设整数 m 1 , m 2 , . . . , m n m_1,m_2,...,m_n m1​,m2​,...,mn​两两互素,则对于任意的整数 a 1 , a 2 , a 3 , . . . , a n a_1,a_2,a_3,...,a_n a1​,a2​,a3​,...,an​,方程组
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . x ≡ a n ( m o d m n ) \begin{cases} x\equiv a_1(mod\ m_1) \\ x\equiv a_2(mod\ m_2) \\... \\x\equiv a_n(mod\ m_n) \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧​x≡a1​(mod m1​)x≡a2​(mod m2​)...x≡an​(mod mn​)​
都存在整数解,且若 X , Y X,Y X,Y都是该方程组的一个解,则有 X ≡ Y ( m o d N ) X\equiv Y(mod\ \ N) X≡Y(mod  N),其中 N = ∏ i = 1 n m i N=\prod_{i=1}^nm_i N=i=1∏n​mi​
x ≡ ∑ i = 1 n a i × N m i × [ ( N m i ) − 1 ] m i ( m o d N ) x\equiv \sum_{i=1}^na_i×\frac{N}{mi}×[(\frac{N}{m_i})_{-1}]_{m_i} \ \ \ (mod\ \ N) x≡i=1∑n​ai​×miN​×[(mi​N​)−1​]mi​​   (mod  N)

说到这里,可能有的同学不明白为什么最后的解要和 N N N取模且解在 [ 0 , N ) [0,N) [0,N)的范围中是唯一的。
在这里,引用一下《数论概论》中关于中国剩余定理的证明,相信大家会明白的。

设 m m m与 n n n是整数, g c d ( m , n ) = 1 gcd(m,n)=1 gcd(m,n)=1, b b b与 c c c是任意整数,则同余式组
{ x ≡ b ( m o d m ) x ≡ c ( m o d n ) \begin{cases} x≡b(mod\ \ m) \\x≡c(mod \ \ n)\end{cases} {x≡b(mod  m)x≡c(mod  n)​
恰有一个解 x x x, x x x的取值范围为 0 ⩽ x < m n . 0⩽x<mn. 0⩽x<mn.

证明:
x ≡ b ( m o d m ) x≡b(mod\ \ m) x≡b(mod  m)的解 x x x由 x = m y + b x=my+b x=my+b的所有数组成,将此代入第二个同余式,得:
m y − b ≡ c ( m o d n ) → m y ≡ c − b ( m o d n ) my-b\equiv c(mod \ n) \rightarrow my\equiv c-b(mod \ n) my−b≡c(mod n)→my≡c−b(mod n)

已知 g c d ( m , n ) = 1 gcd(m,n)=1 gcd(m,n)=1,根据线性同余定理可知同余式在 [ 0 , n ) [0,n) [0,n)范围内恰有一个解 y 1 y_1 y1​且 0 ≤ y 1 < n 0≤y_1<n 0≤y1​<n。
当我们求出 y 1 y_1 y1​的值,那么同余式方程组的解 x 1 x_1 x1​的值为:
x 1 = m y 1 + b x_1=my_1+b x1​=my1​+b

因为在0与 n n n之间有唯一解 y 1 y_1 y1​,用 m m m乘 y 1 y_1 y1​得到了 x 1 x_1 x1​,那么唯一解 x 1 x_1 x1​的取值范围为 0 ≤ x 1 < m n . 0≤x_1<mn. 0≤x1​<mn.
(注: x 1 x_1 x1​是由 m y 1 + b my_1+b my1​+b得到的,在计算 x 1 x_1 x1​的取值范围时为什么把给 b b b忽略掉了?这是因为 m y 1 + b my_1+b my1​+b关于模 m m m和 b b b同余,当 b b b取正数时,可以取一个对应同余的负数,让 m y 1 + b my_1+b my1​+b的值始终处于 m n mn mn之下 )

对于一些简单的同余方程组,有了上述的定义之后,有的时候我们可以采用枚举的方式来计算同余组的解。
例.解下列同余方程组
{ x ≡ 2 ( m o d 3 ) x ≡ 1 ( m o d 4 ) \begin{cases} x\equiv 2 (mod \ \ 3)\\x\equiv 1(mod\ \ 4)\end{cases} {x≡2(mod  3)x≡1(mod  4)​
解:
由上述的公式: x 1 = m y 1 + b ( 0 ≤ y 1 < n ) x_1=my_1+b\ \ (0≤y_1<n) x1​=my1​+b  (0≤y1​<n)可知, m = 3 , b = 2 m=3,b=2 m=3,b=2,枚举 y 1 y_1 y1​( 0 ≤ y 1 < 4 0≤y_1<4 0≤y1​<4)验证 x 1 = 3 y 1 + 2 x_1=3y_1+2 x1​=3y1​+2是否满足方程2。
当 y 1 = 0 y_1=0 y1​=0时, x 1 ≡ 2 ( m o d 4 ) . x_1\equiv 2(mod\ \ 4). x1​≡2(mod  4).
当 y 1 = 1 y_1=1 y1​=1时, x 1 ≡ 1 ( m o d 4 ) . x_1\equiv 1(mod\ \ 4). x1​≡1(mod  4).
当 y 1 = 2 y_1=2 y1​=2时, x 1 ≡ 0 ( m o d 4 ) . x_1\equiv 0(mod\ \ 4). x1​≡0(mod  4).
当 y 1 = 3 y_1=3 y1​=3时, x 1 ≡ 3 ( m o d 4 ) . x_1\equiv 3(mod\ \ 4). x1​≡3(mod  4).
根据上面的枚举过程,当 y 1 = 1 y_1=1 y1​=1时满足方程2, x 1 = 3 + 2 = 5 x_1=3+2=5 x1​=3+2=5,即 x 1 ≡ 5 ( m o d 12 ) x_1\equiv 5(mod\ \ 12) x1​≡5(mod  12)为同余组的解。

扩展中国剩余定理

如果同余方程组的 m m m和 n n n不互质怎么办呢?

定义: 同余方程组:
{ x ≡ b ( m o d m ) x ≡ c ( m o d n ) \begin{cases} x≡b(mod\ \ m) \\x≡c(mod \ \ n)\end{cases} {x≡b(mod  m)x≡c(mod  n)​
恰有一个解 0 ≤ x < m ⋅ n g c d ( m , n ) 0≤x<\frac{m\cdot n}{gcd(m,n)} 0≤x<gcd(m,n)m⋅n​,即在范围 [ 0 , l c m ( m , n ) ) [0,lcm(m,n)\ ) [0,lcm(m,n) )有唯一解。

我们按照同样的思路来证明这个过程:
x ≡ b ( m o d m ) x≡b(mod\ \ m) x≡b(mod  m)的解 x x x由 x = m y + b x=my+b x=my+b的所有数组成,将此代入第二个同余式,得:
m y − b ≡ c ( m o d n ) → m y ≡ c − b ( m o d n ) my-b\equiv c(mod \ n) \rightarrow my\equiv c-b(mod \ n) my−b≡c(mod n)→my≡c−b(mod n)

设 g c d ( m , n ) = d gcd(m,n)=d gcd(m,n)=d,因为 d > 1 d>1 d>1,同余式 m y ≡ c − b ( m o d n ) my\equiv c-b(mod \ n) my≡c−b(mod n)有解的前提是 d ∣ c − b . d|c-b. d∣c−b.
假如 m y ≡ c − b ( m o d n ) my\equiv c-b(mod \ n) my≡c−b(mod n)有解,则在范围 [ 0 , n ) [0,n) [0,n)有 d d d个不同余的解。(都是同余方程里面的性质,不清楚的重新学习同余方程的内容)

因此在范围 [ 0 , n d ) [0,\frac{n}{d}) [0,dn​)中,有唯一解 y 1 , ( 0 ≤ y 1 < n d ) y_1,(0≤y_1<\frac{n}{d}) y1​,(0≤y1​<dn​).
又因为 x 1 = m y 1 + b x_1=my_1+b x1​=my1​+b ,那么唯一解 x 1 x_1 x1​的取值范围为 0 ≤ x 1 < m n g c d ( m , n ) 0≤x_1<\frac{mn}{gcd(m,n)} 0≤x1​<gcd(m,n)mn​,即 0 ≤ x 1 < l c m ( m , n ) . 0≤x_1<lcm(m,n). 0≤x1​<lcm(m,n).证毕。

参考资料:
1.https://zhuanlan.zhihu.com/p/44591114
2.《数论概念第三版》

中国剩余定理和EXCRT相关推荐

  1. 中国剩余定理和扩展中国剩余定理

    也许更好的阅读体验 文章目录 前置知识 中国剩余定理(CRT) 目的 求法 Code 扩展中国剩余定理(EXCRT) 目的 解法 code 前置知识 快速乘 扩展欧几里得定理 同余方程 中国剩余定理( ...

  2. 中国剩余定理(CRT)扩展中国剩余定理(exCRT)

    前言 中国剩余定理(也叫孙子定理)并不是很复杂,由于最近用到了,以前学的时候还不写博客,所以现在补一下 中国剩余定理(CRT) 问题 给出nnn个同余方程 x≡a1(modp1)x≡a2(modp2) ...

  3. [扩展中国剩余定理(EXCRT)]

    前言 与 这个 定理 搏斗了 一天终于 把它kill 了 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 进入正题 题目描述 给定 n 组 非负整数 ai,bi,求解关于 x 的方程组 x ≡ a1 (mo ...

  4. 扩展中国剩余定理 exCRT 学习笔记

    前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...

  5. P4777-[模板]扩展中国剩余定理(EXCRT)

    正题 题目链接:https://www.luogu.org/problem/P4777 题目大意 求方程 {x≡a1(modb1)x≡a2(modb2)...x≡an(modbn)\begin{cas ...

  6. 中国剩余定理(CRT)和扩展中国剩余定理(EXCRT)

    Tip:建议读者不要太着急后翻,按照顺序阅读有助于理解 中国剩余定理(CRT) 问题引出 "有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何?"即,一个整数除以三余 ...

  7. 题解 中国剩余定理(同余方程组) HDU 3579

    题意:对于方程组x=a(mod b)求x. 做法:中国剩余定理和拓展欧几里得. 代码: #include <iostream> #include <cstdio> #inclu ...

  8. 2019ICPC(徐州) - Who is better?(中国剩余定理+斐波那契博弈)

    题目链接:点击查看 题目大意:给定k组a和b表示同余式,分别代表n%a=b,求出n后,代表有n个敌人,有两个人我们称为A和B,从A开始杀敌,第一次A可以杀至少一个敌人,至多n-1个敌人,接下来B与A轮 ...

  9. 初等数论四大定理(威尔逊定理,欧拉定理,费马小定理,中国剩余定理)

    初等数论四大定理 1. 威尔逊定理 (1) 结论 当且仅当ppp为素数时,(p−1)!≡−1(modp)(p-1)!\equiv -1(\mod p)(p−1)!≡−1(modp). (2) 证明 充 ...

最新文章

  1. react项目部署nginx服务器
  2. 电子书下载:Pro Drupal 7 for Windows Developers
  3. VTK:图表之ColorVertexLabels
  4. Java对象在Java虚拟机的创建过程
  5. linux之快速过滤文本的关键字以及快速过滤目录下的关键字
  6. 什么是面向对象_什么是面向对象?新手程序员必掌握的技能
  7. Scala学习(六)练习
  8. 【NOIP2017】【Luogu3955】图书管理员(枚举,取模得后缀)
  9. 配置vivado用vscode编辑文本
  10. 通过elasticsearch对日志进行搜索热词统计
  11. JavaWEB开发国际化
  12. 海信电视一直处在Android,【干货收藏】海信电视免root精简教程,去除自带无用软件,替换桌面可实现开机自启动...
  13. Java zip文件加注释_java.util.zip.ZipEntry.setComment(String comment)方法示例
  14. 解决tomcat报limt 字节长度限制 tomcat web.xml里配置mappedfile
  15. [EndNote]EndNote在Word中的工具条消失了怎么办?-知乎转载
  16. 47 WebGL雾化(大气效果)
  17. python查看excel编码格式_[Python]实现处理读写xlsx xls excel文件格式(含中文处理方法)...
  18. 数据通信系统的性能指标
  19. 至尊宝android.phone,Android至尊宝 索尼爱立信X10i行货评测
  20. Oracle批量插入UUID数据

热门文章

  1. 5G网络能力开放部署及关键技术方案
  2. 如何创建低成本沙箱环境?推荐你使用API仿真!
  3. Silverlight Blend动画设计系列十一:沿路径动画(Animation Along a Path)
  4. IDEA警告:SQL dialect is not configured
  5. html中如何插入pdf文件,如何创建PDF文件
  6. ntp VS chrony
  7. Firefox人气火红 能否取代龙头IE?
  8. small rtos51学习资料收集
  9. AVS3中的AMVR和EMVR
  10. 说得清的Epoll原理