中国剩余定理证明及代码实现
一、定义:中国剩余定理,又称中国余数定理,是数论中的一个关于一元线性同余方程组的定理,说明了一元线性同余方程组有解的准则以及求解方法。也称为孙子定理,古有“韩信点兵”、“孙子定理”、“求一术”(宋沈括)、“鬼谷算”(宋周密)、“隔墙算”(宋 周密)、“剪管术”(宋杨辉)、“秦王暗点兵”、“物不知数”之名。
二、引入:
一元线性同余方程组问题最早可见于中国南北朝时期(公元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)
中国剩余定理证明及代码实现相关推荐
- 中国剩余定理证明过程
原网址:http://blog.csdn.net/wtq493841534/article/details/5452720 中国剩余定理 中国剩余定理可以描述为: 若某数x分别被d1..-.dn除得的 ...
- 代码精进之路~自明的代码
中间变量 Matcher matcher = headerPattern.matcher(line); if (matcher.find()) {headers.put(matcher.group(1 ...
- 第4章 同余问题《信息学奥赛一本通 提高篇》
一.同余问题 常用的数论算法(C++描述) 常用的数论算法(C++描述)_linyq@BambooFan ~-CSDN博客_c++数论 数论中的一些基础算法 数论中的一些基础算法_Every day- ...
- 省选+NOI 第八部分 数论
1.线性基 线性回归-线性基函数模型 线性回归-线性基函数模型_哔哩哔哩_bilibili 0219数论寒假作业选讲2[线性基] 0219数论寒假作业选讲2[线性基]_哔哩哔哩_bilibili 线性 ...
- 微软亚研院副院长周明:从语言智能到代码智能
11月6日上午,在中国中文信息学会和中国计算机学会联合创办的"语言与智能高峰论坛"上,微软亚洲研究院副院长周明,以<从语言智能到代码智能>为题,介绍了智能代码理解和生成 ...
- 中国剩余定理 (孙子定理) 的证明和代码
目录 [引入] [中国剩余定理] [代码实现] [借鉴于] [引入] <孙子算经>里有这样一个题目:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 术曰:" ...
- 洛谷P2480:古代猪文(中国剩余定理)(欧拉定理)
传送门 文章目录 题目描述 解析 总结 代码 题目描述 解析 简单来说,就是求: g∑C(d,n)(d是n的约数)mod 999911659 可以先特判一下,999911659|g时,答案为0 否则, ...
- 设计模式:装饰模式(C++)【小明习武闯天下】
序言 这集带来大家一起学下装饰模式.装饰模式 看名字就能 猜到是干啥 就是用来 搞装修进行装饰的 嘛!没毛病,其实装饰模式 确实是用来装饰对象的 而且是为了解耦的.我们知道 类是生成对象的模板,我们 ...
- python以什么表示代码层次_在Python中,采用代码缩进和( )区分代码之间的层次。_学小易找答案...
[填空题]29 号元素 Cu 基态时的电子排布式为 ___ __ ,该元素在周期表中位于 __ _ 周期. __ __ 族. [单选题]"我要努力实现梦想,以弥补小时候吹过的牛"小 ...
- 深度学习自动编译和优化技术调研
深度学习自动编译和优化技术调研 转自:https://moqi.com.cn/blog/deeplearning/ 作者:墨奇科技全栈开发 在墨奇科技,我们需要将一些包含深度神经网络(DNN)的 AI ...
最新文章
- 原创 | 一文了解边缘计算和边缘AI
- 怀旧服湖畔镇服务器位置,《魔兽世界怀旧服》今天再开10组新服 47组服务器免费转服开启...
- ㉔云上场景:瑞云科技,支持Render cloud的超强计算
- 20172307 结对编程项目-四则运算 第二周 阶段总结
- 在数据准备区中允许使用的数据结构有哪些, 各有什么优点?
- 距离向量路由环路解决的方法.
- .NET Core 3.1通用主机原理及使用
- 大东电报与雷格斯在全球部署宝利通高清系统
- 推荐阅读-Docker实现原理之Namespace,CGroup
- html下移,jQuery实现元素的上移下移删除
- SIGCOMM 2010 论文 paper list
- 快压卸载后,右键打开压缩文件时还是有快压,方案:删除注册表相关项
- java 读usb口 用POS-58 90U 打印
- 技术面试时该反问面试官什么问题?
- 世界十大高楼中国占6座 中东要建第一楼
- html5 制作书架展示 PHP,html5制作转盘的详解及实例
- 一个屌丝程序猿的人生(九十)
- VM原理(个人见解)
- 优先队列(priority_queue)
- []==''返回?为什么?运算符==进行了什么操作?
热门文章
- C. Minimum Ties (构造)
- BoxSup: Exploiting Bounding Boxes to Supervise Convolutional Networks for Semantic Segmentation
- python股票网格交易法详解_详解网格交易法
- 批处理中的删除命令:del
- 关于注意力的自上而下和自下而上(top-down attention and bottom-up attention)
- 三极管做开关管的总结(理解三极管)
- 苹果6电池价格_苹果8plus电池不耐用,苹果8p换电池价格
- 个人笔记——消除无用符号·消除空产生式·消除单一产生式·消除左递归
- 切换无线网卡失败服务器提示,无线网卡切换为AP模式时提示ICS启动失败的解决方法...
- mysql根据各种条件统计_Mysql按条件计数多种实现方法解析