一、定义:中国剩余定理,又称中国余数定理,是数论中的一个关于一元线性同余方程组的定理,说明了一元线性同余方程组有解的准则以及求解方法。也称为孙子定理,古有“韩信点兵”、“孙子定理”、“求一术”(宋沈括)、“鬼谷算”(宋周密)、“隔墙算”(宋 周密)、“剪管术”(宋杨辉)、“秦王暗点兵”、“物不知数”之名。

二、引入:

一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作《孙子算经》卷下第二十六题,叫做“物不知数”问题,原文如下:

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

即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。《孙子算经》中首次提到了同余方程组问题,以及以上具体问题的解法,因此在中文数学文献中也会将中国剩余定理称为孙子定理。

宋朝数学家秦九韶于1247年《数书九章》卷一、二《大衍类》对“物不知数”问题做出了完整系统的解答。明朝数学家程大位在《算法统宗》中将解法编成易于上口的《孙子歌诀》:

三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五便得知

这个歌诀给出了模数为3、5、7时候的同余方程的秦九韶解法。意思是:将除以3得到的余数乘以70,将除以5得到的余数乘以21,将除以7得到的余数乘以15,全部加起来后再减去105或者105的整数倍,得到的数就是答案(除以105得到的余数则为最小答案)。比如说在以上的物不知数问题里面,使用以上的方法计算就得到

70*2+21*3+15*2=233=210+23

因此按歌诀求出的结果就是23.

三、证明:

要证明中国剩余定理,首先,我们需要知道几个必须的公式,第一个呢,是在整数{Zm}(m表示所含整数个数)中,任一个M属于{Zm},都可写为:

M=(k1*m1)*(k2*m2)*.......*(ki*mi)

所以,当我们要求一个数A满足 ai=A mod mi时,可以写出一个对应关系{A双箭头(a1,a2,.....,ai)}

且此转换是唯一确定的,接下来,对于1<=i<=k,令Mi=M/mi,因为我们已知M=(k1*m1)*(k2*m2)*.......*(ki*mi),所以有Mi=0 mod mj;

定义 ci=Mi * (Mi(-1) mod mi) ——其中后半部分为Mi关于mi的逆元

A=(a1*c1+a2*c2+......+ai*ci) ( mod M)

设正整数两两互素,则同余方程组

                             

有整数解。并且在模下的解是唯一的,解为

                               

其中,而的逆元。

便可以求出以上等问题。

四、代码实现:

#A=(a1*c1+a2*c2+.......+ai*ci)(mod M)

#可使用 for i in range(1,n)将mi和ai的输入延申到n-1的范围

import gmpy2

m1=eval(input())  

m2=eval(input())

m3=eval(input())

#由题意,a1=a3=,a2=

a1=eval(input())

a2=eval(input())

a3=eval(input())

M=m1*m2*m3

num1=gmpy2.invert(m2*m3,m1)

num2=gmpy2.invert(m1*m3,m2)

num3=gmpy2.invert(m2*m1,m3)

c1=a1*(M/m1)*num1

c2=c1+a2*(M/m2)*num2

c3=c2+a3*(M/m3)*num3

m=c3%M

print(m)

中国剩余定理证明及代码实现相关推荐

  1. 中国剩余定理证明过程

    原网址:http://blog.csdn.net/wtq493841534/article/details/5452720 中国剩余定理 中国剩余定理可以描述为: 若某数x分别被d1..-.dn除得的 ...

  2. 代码精进之路~自明的代码

    中间变量 Matcher matcher = headerPattern.matcher(line); if (matcher.find()) {headers.put(matcher.group(1 ...

  3. 第4章 同余问题《信息学奥赛一本通 提高篇》

    一.同余问题 常用的数论算法(C++描述) 常用的数论算法(C++描述)_linyq@BambooFan ~-CSDN博客_c++数论 数论中的一些基础算法 数论中的一些基础算法_Every day- ...

  4. 省选+NOI 第八部分 数论

    1.线性基 线性回归-线性基函数模型 线性回归-线性基函数模型_哔哩哔哩_bilibili 0219数论寒假作业选讲2[线性基] 0219数论寒假作业选讲2[线性基]_哔哩哔哩_bilibili 线性 ...

  5. 微软亚研院副院长周明:从语言智能到代码智能

    11月6日上午,在中国中文信息学会和中国计算机学会联合创办的"语言与智能高峰论坛"上,微软亚洲研究院副院长周明,以<从语言智能到代码智能>为题,介绍了智能代码理解和生成 ...

  6. 中国剩余定理 (孙子定理) 的证明和代码

    目录 [引入] [中国剩余定理] [代码实现] [借鉴于] [引入] <孙子算经>里有这样一个题目:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 术曰:" ...

  7. 洛谷P2480:古代猪文(中国剩余定理)(欧拉定理)

    传送门 文章目录 题目描述 解析 总结 代码 题目描述 解析 简单来说,就是求: g∑C(d,n)(d是n的约数)mod 999911659 可以先特判一下,999911659|g时,答案为0 否则, ...

  8. 设计模式:装饰模式(C++)【小明习武闯天下】

    序言 这集带来大家一起学下装饰模式.装饰模式 看名字就能  猜到是干啥 就是用来 搞装修进行装饰的 嘛!没毛病,其实装饰模式 确实是用来装饰对象的 而且是为了解耦的.我们知道 类是生成对象的模板,我们 ...

  9. python以什么表示代码层次_在Python中,采用代码缩进和( )区分代码之间的层次。_学小易找答案...

    [填空题]29 号元素 Cu 基态时的电子排布式为 ___ __ ,该元素在周期表中位于 __ _ 周期. __ __ 族. [单选题]"我要努力实现梦想,以弥补小时候吹过的牛"小 ...

  10. 深度学习自动编译和优化技术调研

    深度学习自动编译和优化技术调研 转自:https://moqi.com.cn/blog/deeplearning/ 作者:墨奇科技全栈开发 在墨奇科技,我们需要将一些包含深度神经网络(DNN)的 AI ...

最新文章

  1. 原创 | 一文了解边缘计算和边缘AI
  2. 怀旧服湖畔镇服务器位置,《魔兽世界怀旧服》今天再开10组新服 47组服务器免费转服开启...
  3. ㉔云上场景:瑞云科技,支持Render cloud的超强计算
  4. 20172307 结对编程项目-四则运算 第二周 阶段总结
  5. 在数据准备区中允许使用的数据结构有哪些, 各有什么优点?
  6. 距离向量路由环路解决的方法.
  7. .NET Core 3.1通用主机原理及使用
  8. 大东电报与雷格斯在全球部署宝利通高清系统
  9. 推荐阅读-Docker实现原理之Namespace,CGroup
  10. html下移,jQuery实现元素的上移下移删除
  11. SIGCOMM 2010 论文 paper list
  12. 快压卸载后,右键打开压缩文件时还是有快压,方案:删除注册表相关项
  13. java 读usb口 用POS-58 90U 打印
  14. 技术面试时该反问面试官什么问题?
  15. 世界十大高楼中国占6座 中东要建第一楼
  16. html5 制作书架展示 PHP,html5制作转盘的详解及实例
  17. 一个屌丝程序猿的人生(九十)
  18. VM原理(个人见解)
  19. 优先队列(priority_queue)
  20. []==''返回?为什么?运算符==进行了什么操作?

热门文章

  1. C. Minimum Ties (构造)
  2. BoxSup: Exploiting Bounding Boxes to Supervise Convolutional Networks for Semantic Segmentation
  3. python股票网格交易法详解_详解网格交易法
  4. 批处理中的删除命令:del
  5. 关于注意力的自上而下和自下而上(top-down attention and bottom-up attention)
  6. 三极管做开关管的总结(理解三极管)
  7. 苹果6电池价格_苹果8plus电池不耐用,苹果8p换电池价格
  8. 个人笔记——消除无用符号·消除空产生式·消除单一产生式·消除左递归
  9. 切换无线网卡失败服务器提示,无线网卡切换为AP模式时提示ICS启动失败的解决方法...
  10. mysql根据各种条件统计_Mysql按条件计数多种实现方法解析