在《孙子算经》里有这么一段话:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何? ”意思就是,一个数除以3余2,除以5余3,除以7余2。
  用数学公式描述,就是:
x ≡ 2 ( m o d 3 ) x ≡ 3 ( m o d 5 ) x ≡ 2 ( m o d 7 ) x \equiv 2\;(mod\;3)\\ x \equiv 3\;(mod\;5)\\ x \equiv 2\;(mod\;7) x≡2(mod3)x≡3(mod5)x≡2(mod7)
   ≡ \equiv ≡是等价符号,整个公式表示同余。 x ≡ 2 ( m o d 3 ) x \equiv 2\;(mod\;3) x≡2(mod3)表示x和2除于3的余数是相等的。很明显,解不止一个,23就是其中一个解。3、5、7的最小公倍数是105,对于所有除于105余23的正整数,也就是23+105N(N取任意正整数)都是这个方程的解。所以解集就是同余类[23]105,最小公倍数是容易计算出来的,但最重要的是我们要求这个同余类的余数23。
  如果用brute-force算法,从1到105之间循环,每个数用同余方程组验证,那肯定能算出来。如果开发时间比较紧,brute-force是最好的办法。
  但是实际上,这个问题早就有答案了。用数学方式描述下计算过程就是:
  假设线性同余方程组为
x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) x ≡ a 3 ( m o d m 3 ) ⋮ x ≡ a n ( m o d m n ) x \equiv a_1\;(mod\;m_1)\\ x \equiv a_2\;(mod\;m_2)\\ x \equiv a_3\;(mod\;m_3)\\ \vdots\\ x \equiv a_n\;(mod\;m_n)\\ x≡a1​(modm1​)x≡a2​(modm2​)x≡a3​(modm3​)⋮x≡an​(modmn​)
  假设M为m1到Mn的最小公倍数。bi=M/Mi。再定义ci=b1-1(mod Mi).这里的-1符号不是-1次方的意思,而是在Mi下的模乘逆元的意思。那么结果就是
x = ( ∑ i = 0 n a i b i c i ) ( m o d M ) x=(\sum_{i=0}^na_ib_ic_i)(mod\;M)\\ x=(i=0∑n​ai​bi​ci​)(modM)
  公式,我这里就不花时间证明了,知乎、CSDN有大佬的证明过程,这里我给出了python代码:

# _*_ coding:utf-8 _*_
from com.youngthing.mathalgorithm.extend_euclid import modular_inversedef crt(a_array, m_array):# 假设m互质,这里就不做质因数分解了m_pi = 1for m in m_array:m_pi *= mx = 0for i, a in enumerate(a_array):m = m_array[i]b = m_pi // mx += a * (b) * modular_inverse(b, m)return x % m_piif __name__ == '__main__':print(crt([2, 3, 2], [3, 5, 7]))

  测试结果为23。代码中用到的模乘逆元,可以看本专栏另一个篇文章:3 模乘逆元-扩展欧几里得法

2.3 中国剩余定理相关推荐

  1. CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 CF338D GCD Table(拓展中国剩余定理,细节处理,2900分) Problem 有一张 n ...

  2. 初等数论--同余方程--同余方程组:中国剩余定理

    初等数论--同余方程--同余方程组:中国剩余定理 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列:初等数论 ...

  3. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  4. 信奥中的数学:孙子定理 中国剩余定理

    孙子定理 中国剩余定理 孙子定理 中国剩余定理_Dreamer Thinker Doer-CSDN博客 中国剩余问题(简介+详解) 中国剩余问题(简介+详解)_dreamzuora的博客-CSDN博客 ...

  5. 数论 —— 线性同余方程组与中国剩余定理

    [线性同余方程组] 由若干个线性同余方程构成的线性方程组. 例如: 其解法最早由我国<孙子算经>给出,因此解法称为"孙子定理",又叫"中国剩余定理" ...

  6. 通常情况下的中国剩余定理

    这几天学了学中国剩余定理....本来计划是一天学互质版一天学非互质版的,结果非互质版就学了好长时间...不过好在会证明了,考场上大力推一波应该是没问题的吧... 中国剩余定理是求形如x≡a1(mod ...

  7. poj 1006 java_POJ 1006 Java:中国剩余定理

    题目描述: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏 ...

  8. 从孙子算经到中国剩余定理

    中国剩余定理中间涉及一个重要观念:互质: 首先来看<孙子算经>卷下第二十六问:今有物,不知其数.三.三数之,剩二:五.五数之,剩三:七.七数之,剩二.问物几何? 转换为数学语言即是(理解其 ...

  9. 密码学基础算法(二)中国剩余定理

    随便谷歌了一个图片做首图 原图地址: http://www.siwapu.com/etagid41968b0/ 密码学基础系列: (一) 基于整数的欧几里得算法和扩展欧几里得算法 (二) 中国剩余定理 ...

  10. 扩展欧几里得算法、乘法逆元与中国剩余定理

    文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...

最新文章

  1. ZYNQ-7000如何生成从Flash和SD卡启动的镜像文件
  2. mysql 连接器配置_配置连接器 - 金融分布式架构 SOFAStack - 阿里云
  3. 最全面的C/C++编码规范总结
  4. spider-定向抓取
  5. BeetleX.WebFamily文件图片管理集成
  6. post修改服务器数据源,postgresql安装及配置超详细教程
  7. Eclipse/MyEclipse注释模板和格式化模板的使用
  8. 我的编程认知:多思考、多编码、多测试
  9. Linux运维 第三阶段 (五) DNS(主从,rndc远程控制,子域授权,视图,压力测试)
  10. php在线解密mcrypt,PHP 基于 Mcrypt 的加密解密简单类
  11. php 添加表,关于php:如何向MYSQL表添加新列
  12. AS3.0中的显示编程(五)-- Loader(加载器)
  13. MYSQL 引擎的情况
  14. librdkafka 封装的C++类
  15. 用python计算偏导数
  16. SpringBoot + screw 一键生成数据库文档,告别CV大法,解放生产力
  17. 数字图像处理:图像压缩1 基础无损压缩
  18. Go+PHP实现敏感词检测
  19. VScode远程调试remote development
  20. Windows10 VS2019编译WebRTC官方demo

热门文章

  1. 网吧视频点播解决方案
  2. 2019、2020、2021年技术知识巩固记录
  3. 等一个人好累,爱一个人好苦
  4. Ceph学习——Librbd块存储库与RBD读写流程源码分析
  5. Gigaphoton出厂最新机型KrF光源“G60K”
  6. 拟牛顿法算法的设计与实现c语言,牛顿法与拟牛顿法的故事
  7. 【vue设计与实现】快速Diff算法 1
  8. 企业研发流程演进之路
  9. 礼品 read.php,心愿送礼网教你如何体面的接受礼品
  10. Storm,Spark和Flink简介 联系与区别