首先请看定义:(百科上抄下来的)孙子定理是中国古代求解一次同余式组(见同余)的方法。是数论中一个重要定理。又称中国余数定理。

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

原文如下:

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

**

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


通俗点讲呢就是这样一个问题:

有一堆物品,数量为n个。

把它三个三个一分组多出来2个,即n%3=2。

把它五个五个一分组多出来3个,即n%5=3。

把它七个七个一分组多出来2个,即n%7=2.

问这堆物品有多少个,即n=?

看起来是不是比较棘手?当然暴力的话是可以解出来的,但是有什么更快的方法呢?

首先我们设n1%3=2,即n1=3k+2;

同理n2=5k+3,n3=7k+2;

那么可不可以找到一个数n=n1+n2+n3使得满足上述所有条件?

在这之前我们需要一个知识点:**若a%b=c,则易知(a+k*b)%b=c.

**

再对问题进一步简化,怎样求出一个一个数x=n1+n2满足x%3=2且x%5=3?

这时候就要用到刚刚的推论,已知n1%3=2,若使(n1+n2)%3=2,则需n2是3的整数倍.同样的,n1也必须是5的整数倍。

于是,要找到一个解n=n1+n2+n3则需以下条件:

  - n1%3=2且n1是5和7的公倍数
- n2%5=3且n2是3和7的公倍数
- n3%7=2且n3是3和5的公倍数

也就是说我们只要找到一个是5和7的公倍数且这个数模3得2,一个是3和7的公倍数且这个数模5得3,一个是3和5的公倍数且这个数模7得2(可知每种数有无数个)。然后把这三个数加起来就是我们要的一个解

接下来的求解就要逆元知识,简单点讲就是:

 若a*b%p=1(或写成a*b=1(mod p)),
则我们称b是a关于p的逆元。
前提:a,b互质
我们已知a和p,就可以求出a关于p的逆元

那么,对于n1来说,假如我们知道一个5和7的公倍数M,又知道M mod 3=2,若我们能像求逆元一样求出一个数b使得M×b%3=2,我们就得到符合条件的n1=M×b,但是逆元中的余数是1,那该怎么办呢??

我们不妨先求出5和7公倍数M于3的逆元b1,即M×b1%3=1,而我们要求的是M×b%3=2.容易看出,只要我们把上式乘以2得到M×2×b1%3=2。

也就是说,只要将5和7的公倍数乘以它的逆元再乘以2就是我们要的n1。同理也可以求到n2,n3。n1+n2+n3就是其中一个解。

通常为了方便起见,我们就直接将5×7作为

他们的公倍数,即n1=5×7×inv(5×7,3)×2,inv(a,p)表示a关于p的逆元。


于是一般地对于:

假设整数m1,m2,... ,mk两两互质,则对任意的整数:a1,a2, ... ,an,方程组 有解,并且通解可以用如下方式构造得到:

关于的逆元。



也许你会好奇为什么x不应该是等于右式而是同余于M呢?

这又要前面的知识:

若a%b=c,则易知(a-k*b)%b=c.

则同时加(或减)M是不会对解的正确性有影响的。于是如果你想求最小整数解只需把n1+n2+n3+n4...(还记得一开始的例子吗?)的结果mod M.

清北学堂-DAY2-数论专题-中国剩余定理(CRT)的更多相关文章

  1. 清明培训 清北学堂 DAY2

    今天是钟皓曦老师的讲授~~ 总结了一下今天的内容: 数论!!! 1.整除性 2.质数 定义: 性质:  3.整数分解定理——算数基本定理 证明: 存在性: 设N是最小不满足唯一分解定理的整数 (1)  ...

  2. 清北学堂Day2

    算数基本定理: 1.整数及其相关 2.唯一分解定理 对于任意的大于1的正整数N,N一定能够分解成有限个质数的乘积,即 其中P1<P2<...<Pk,a1,a2,...,ak>= ...

  3. 五一培训 清北学堂 DAY2

    今天还是冯哲老师的讲授~~ 今日内容:简单数据结构(没看出来简单qaq) 1.搜索二叉树 前置技能 一道入门题在初学OI的时候,总会遇到这么一道题.给出N次操作,每次加入一个数,或者询问当前所有数的最 ...

  4. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

  5. 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

    清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...

  6. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  7. 清明培训 清北学堂 DAY1

    今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1)   高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...

  8. 7月清北学堂培训 Day 3

    今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...

  9. 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结

    中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...

随机推荐

  1. 阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天

    阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天

  2. Ubuntu18.04修改主机名和网卡地址

    date: 2019-06-26 09:56:04 author :headsen chen notice :个人原创 1,Ubuntu18.04 设置固定IP: 2,Ubuntu 18.04 设置主 ...

  3. leetcode 55. Jump Game、45. Jump Game II(贪心)

    55. Jump Game 第一种方法: 只要找到一个方式可以到达,那当前位置就是可以到达的,所以可以break class Solution { public: bool canJump(vecto ...

  4. android APP国际化一键切换实现

    首先看目录: 上代码: package com.loaderman.language; import android.content.res.Configuration; import android ...

  5. 【419】C语言语句

    判断语句 C 语言提供了以下类型的判断语句.点击链接查看每个语句的细节. 语句 描述 if 语句 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成. if...else 语句 一个 if 语句 ...

  6. jQuery前端插件以及图片延迟加载

    插件名称 用途 插件官网地址 fontawsome CSS图标插件 http://fontawesome.io easyui 基于jQuery的用户界面插件集合 http://www.jeasyui. ...

  7. python 基础之确认文件是否存在

    def check_exist_bills(): file_dir=os.listdir('../db') bills_db_list=[] for item in file_dir: if item ...

  8. 浏览器最小显示12px字体的解决方法

    今天做打印标签,发现浏览器最小字体限制了12px,标签那么小,12px随便几个字就给占满了: 最后通过  transform:scale(1,0.8) 搞定: 这个属性允许将元素移动.压缩.旋转:这里 ...

  9. SpringBoot集成tk mybatis插入数据,回显主键为null

    实体信息如下 @Data public class ApiCertificate{ @Id @GeneratedValue(generator = "JDBC") private ...

  10. mysql创建数据库、表、写数据

    mysql> create database ceshi; Query OK, 1 row affected (0.01 sec) 给数据库授权,否则程序时无法连接ceshi数据库的,每次创建一 ...