2.3 中国剩余定理
在《孙子算经》里有这么一段话:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何? ”意思就是,一个数除以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∑naibici)(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 中国剩余定理相关推荐
- CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 CF338D GCD Table(拓展中国剩余定理,细节处理,2900分) Problem 有一张 n ...
- 初等数论--同余方程--同余方程组:中国剩余定理
初等数论--同余方程--同余方程组:中国剩余定理 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列:初等数论 ...
- 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法
打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...
- 信奥中的数学:孙子定理 中国剩余定理
孙子定理 中国剩余定理 孙子定理 中国剩余定理_Dreamer Thinker Doer-CSDN博客 中国剩余问题(简介+详解) 中国剩余问题(简介+详解)_dreamzuora的博客-CSDN博客 ...
- 数论 —— 线性同余方程组与中国剩余定理
[线性同余方程组] 由若干个线性同余方程构成的线性方程组. 例如: 其解法最早由我国<孙子算经>给出,因此解法称为"孙子定理",又叫"中国剩余定理" ...
- 通常情况下的中国剩余定理
这几天学了学中国剩余定理....本来计划是一天学互质版一天学非互质版的,结果非互质版就学了好长时间...不过好在会证明了,考场上大力推一波应该是没问题的吧... 中国剩余定理是求形如x≡a1(mod ...
- poj 1006 java_POJ 1006 Java:中国剩余定理
题目描述: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏 ...
- 从孙子算经到中国剩余定理
中国剩余定理中间涉及一个重要观念:互质: 首先来看<孙子算经>卷下第二十六问:今有物,不知其数.三.三数之,剩二:五.五数之,剩三:七.七数之,剩二.问物几何? 转换为数学语言即是(理解其 ...
- 密码学基础算法(二)中国剩余定理
随便谷歌了一个图片做首图 原图地址: http://www.siwapu.com/etagid41968b0/ 密码学基础系列: (一) 基于整数的欧几里得算法和扩展欧几里得算法 (二) 中国剩余定理 ...
- 扩展欧几里得算法、乘法逆元与中国剩余定理
文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...
最新文章
- ZYNQ-7000如何生成从Flash和SD卡启动的镜像文件
- mysql 连接器配置_配置连接器 - 金融分布式架构 SOFAStack - 阿里云
- 最全面的C/C++编码规范总结
- spider-定向抓取
- BeetleX.WebFamily文件图片管理集成
- post修改服务器数据源,postgresql安装及配置超详细教程
- Eclipse/MyEclipse注释模板和格式化模板的使用
- 我的编程认知:多思考、多编码、多测试
- Linux运维 第三阶段 (五) DNS(主从,rndc远程控制,子域授权,视图,压力测试)
- php在线解密mcrypt,PHP 基于 Mcrypt 的加密解密简单类
- php 添加表,关于php:如何向MYSQL表添加新列
- AS3.0中的显示编程(五)-- Loader(加载器)
- MYSQL 引擎的情况
- librdkafka 封装的C++类
- 用python计算偏导数
- SpringBoot + screw 一键生成数据库文档,告别CV大法,解放生产力
- 数字图像处理:图像压缩1 基础无损压缩
- Go+PHP实现敏感词检测
- VScode远程调试remote development
- Windows10 VS2019编译WebRTC官方demo