中国剩余定理(孙子定理)

中国剩余定理(孙子定理)看了很多博客始终没弄明白中国剩余定理到底是怎么算出来的 看孙子的话完全是一脸懵逼啊 还好有这个博客大神的博客 Orz 真的讲的特别清晰 点赞点赞 下面会用到的数学公式 如果 a b c 那么如果 x b c 2 此时 x a 2 也就是说被除数相等时 除数和余数是成比例的 如果 a b c 那么 a k b b c 其中 k 为整数问题引入 在 孙子算经 中有这样一

看了很多博客始终没弄明白中国剩余定理到底是怎么算出来的,看孙子的话完全是一脸懵逼啊……还好有这个博客大神的博客Orz,真的讲的特别清晰。点赞点赞~

下面会用到的数学公式:

①如果a%b=c,那么如果x%b=c/2,此时x=a/2;也就是说除数相等时,被除数和余数是成比例的。

②如果a%b=c,那么 (a + k*b)%b=c,其中k为整数

问题引入:

      在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。

具体解法分下面三步:

1、找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍数中找出被5除余1 的最小数21,最后从5和7的公倍数中找出除3余1的最小数70。

2、用15乘以2(2为最终结果除以7的余数),用21乘以3(3为最终结果除以5的余数),同理,用70乘以2(2为最终结果除以3的余数),然后把三个乘积相加15∗2+21∗3+70∗215∗2+21∗3+70∗2得到和233。

3、用233除以3、5、7的最小公倍数105,得到余数23,这个余数23就是符合条件的最小数。

解释:

       那么我们可能会问:为什么要这样算……

       如果我们设出三个数n1、n2、n3,满足:n1%3=2、n2%5=3、n3%7=2;

       那么,我们先从n1这个角度出发,能不能让n1+n2也满足%3=2呢?根据上面的公式②,如果n2是3的倍数就完全可以满足,  同样如果让n1+n2+n3满足%3=2,需要n2和n3都是3的倍数;

同样的,我们从n2和n3的角度出发可以得到:

1、n1需要是5、7的倍数;

2、n2需要是3、7的倍数;

3、n3需要是3、5的倍数;

       如果找到了满足上面的三个条件的n1、n2、n3,根据上面的推论,n1+n2+n3就是满足题目要求的那个数,(但不一定是最小的哈)

接下来的问题就是———————-我们要怎么在5和7的倍数中找出一个数满足%3=2(2、3条件类似)

我们最开始列出的第一个公式还没有用呢!是不是可以转化成在5和7的倍数中找到一个数满足%3=1就可以了呢?然后我们再*2就可以了,为什么会想要让余数为1呢?因为这个跟逆元的求法几乎一样~。

补充:求逆元的方法:

①费马小定理

中国剩余定理(孙子定理)

②扩展欧几里得

中国剩余定理(孙子定理)

——————————————————-我只是个分割线——————————————————————————

下面给出模板代码:

//中国剩余定理模板 typedef long long ll; ll china(ll a[],ll b[],int n)//a[]为除数,b[]为余数 { ll M=1,y,x=0; for(int i=0;i 
  

另:在倒数第二行的式子中,w*(b[i]/t)*x中,x其实是式子 w*x+a[i]*y=gcd 求出来的“逆元”,打引号是因为真正的逆元式子右边应该是1而不是gcd 因此要把x/t,这是的x/t才是真正的逆元,然后我们再乘以余数b[i]*w,得到的就是我们想要的~~

呼呼

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200008.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午11:43
下一篇 2026年3月20日 上午11:43


相关推荐

  • python计算圆的周长和面积

    python计算圆的周长和面积分享自己的 Python 学习之路写自己的第一个 Python 程序 计算圆的面积及周长先写一个简单的 if name main 创建一个输入框 radius input 请输入圆的半径 打印出输入框的内容 print radius 然后运行输入 10 进行测试可以看到已经能正常获取 input 的内容了 接下来的我们继续写 PI 圆周率 PI 3 if name

    2026年3月17日
    2
  • Python基础(3)—八种数据类型

    Python基础(3)—八种数据类型Python的八种数据类型八种数据类型分别是:number(数字)、string(字符串)、Boolean(布尔值)、None(空值)list(列表)、tuple(元组)、dict(字典)、set(集合)。下面,我将这八种类型的相关知识,做一个梳理。 1.number(数字类型)2.string(字符串类型)3.Boolean(布尔值)与空值4.list…

    2022年6月10日
    33
  • 在线navicat16 激活码 键[在线序列号]

    在线navicat16 激活码 键[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    2.0K
  • webapp开发框架选择注意点[通俗易懂]

    webapp开发框架选择注意点[通俗易懂]webapp开发框架选择需要注意:第一步:开发支持的语言类型根据前端开发人员的能力,来选择webapp开发框架。例如:前端人员只会写react就要求webapp开发框架支持react。第二步:查看webapp开发框架文档是否齐全例如:功能性API的详细使用文档和示例等插件功能示例代码第三步:确认webapp开发框架能否满足项目需求确认APP的功能是否都能满足,开发难易程度开发的APP复杂度、功能是否能满足,交互比较多,业务逻辑比较复杂,找到对应功能点,提前确

    2022年6月15日
    30
  • 【软考】系统集成项目管理工程师(三)系统集成专业技术知识

    【软考】系统集成项目管理工程师(三)系统集成专业技术知识软考中级——系统集成项目管理工程师备考干货第三章:系统集成专业技术知识。

    2022年10月15日
    4
  • 【NLP学习计划】万字吃透NER

    【NLP学习计划】万字吃透NERNLP 系列学习计划 今天研究的是顶会 ACL2018 的一篇文章 并尝试在相同数据集上自己实现模型 领会 STOA 的魅力

    2026年3月17日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号