中国剩余定理,又名孙子定理

1、

首先:

能求解什么问题呢?

问题:

一堆物品

3个3个分剩2个

5个5个分剩3个

7个7个分剩2个

问这个物品有多少个

解这题,我们需要构造一个答案

我们需要构造这个答案

5*7*inv(5*7,  3) % 3  =  1

3*7*inv(3*7,  5) % 5  =  1

3*5*inv(3*5,  7) % 7  =  1

这是逆元

然后两边同乘你需要的数

2 * 5*7*inv(5*7,  3) % 3  =  2

3 * 3*7*inv(3*7,  5) % 5  =  3

2 * 3*5*inv(3*5,  7) % 7  =  2

a = 2 * 5*7*inv(5*7,  3)

b = 3 * 3*7*inv(3*7,  5)

c = 2 * 3*5*inv(3*5,  7)

那么

a % 3 = 2

b % 5 = 3

c % 7 = 2

其实答案就是a+b+c

因为

a%5 = a%7 = 0 因为a是5的倍数,也是7的倍数

b%3 = b%7 = 0 因为b是3的倍数,也是7的倍数

c%3 = c%5 = 0 因为c是3的倍数,也是5的倍数

所以

(a + b + c) % 3 = (a % 3) + (b % 3) + (c % 3) = 2 + 0 + 0 = 2

(a + b + c) % 5 = (a % 5) + (b % 5) + (c % 5) = 0 + 3 + 0 = 3

(a + b + c) % 7 = (a % 7) + (b % 7) + (c % 7) = 0 + 0 + 2 = 2

你看你看,答案是不是a+b+c(。・ω・)ノ゙,完全满足题意

但是答案,不只一个,有无穷个,每105个就是一个答案(105 = 3 * 5 * 7)

根据计算,答案等于233,233%105 = 23

如果题目问你最小的那个答案,那就是23了


另外一种解释:

一堆物品

3个3个分剩2个

5个5个分剩3个

7个7个分剩2个

问这个物品有多少个?

首先假如我们求出这样三个数k1,k2,k3,满足 k1与3互质且是5和7的倍数,k2与5互质且是3,7的倍数,k3与7互质且是3和5的倍数

那么容易意会得到,k1∗2+k2∗3+k3∗2   一定会是一个满足题目条件的数。
而题目的通解可表示为这个数每次都加上3,5,7的最小公倍数

辣么如何求出k1,k2,k3呢?

首先我们求出3,5,7的lcm=105
然后我们令:
x1=105/3=35
x2=105/5=21
x3=105/7=15
然后我们求解以下方程:
a∗x1%3=1         //   a×x1是k1,a×x1%3=1,那么2×a×x1%3=2与题意相符
b∗x2%5=1
c∗x3%7=1
啊呀这个格式的式子好眼熟。。。那么就愉快地用扩展欧几里德求出来吧!
a=2,b=1,c=1  (用扩展欧几里德求出的)
答案就是:
ans=(a∗x1∗2+b∗x2∗3+c∗x3∗2)%lcm=23
其中

k1=a*x1=2*35=70

k2=b*x2=1*21=21

k3=c*x3=15*1=15;

所以满足条件的是   ( 70×2+21×3+15×2 ) %105 =23

结果是  23


2、

以下抄自百度百科

中国剩余定理给出了以下的一元线性同余方程组:

中国剩余定理说明:假设整数m1,m2, ... ,mn两两互质,则对任意的整数:a1,a2, ... ,an,

方程组(S)

有解,并且通解可以用如下方式构造得到:设

是整数m1,m2, ... ,mn的乘积,并设

是除了mi以外的n- 1个整数的乘积。设

这个就是逆元了

通解形式为

在模M的意义下,方程组(S)只有一个解:


Code:

#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
LL a[101];
LL b[101];
LL ex_gcd(LL a,LL b,LL &x,LL &y,LL &d) // 求逆元
{if(a==0&&b==0)d=-1;if(b==0){x=1;y=0;d=a;}else{ex_gcd(b,a%b,y,x,d);y-=(a/b)*x;}
}
LL CRT(LL n)  // 中国剩余定理( CRT )
{LL sum=1;for(LL i=0;i<n;i++)sum*=a[i]; // 最小公倍数LL ans=0;for(LL i=0;i<n;i++){LL x,y,d;LL t=sum/a[i]; ex_gcd(t,a[i],x,y,d); // 用扩展欧几里德 求 “系数”——  1ans=(ans+t*x*b[i])%sum; // 最后结果 ———————— 2}return (ans+sum)%sum;
}
int main()
{LL k,n;cin>>n;for(LL i=0;i<n;i++)scanf("%lld %lld",&a[i],&b[i]); cout<<CRT(n)<<endl;
}

解释一下

1——: 求出来的是系数,类似于上边 1 中讲的 a、b、c

2——: 求的是最后的结果,直接套 这个式子  ans=(a∗x1∗2+b∗x2∗3+c∗x3∗2) // x1 是 t=sum / a[ i ]

中国剩余定理(又称孙子定理)相关推荐

  1. 中国剩余定理 即 孙子定理

    中国剩余定理 即 孙子定理 . 中国古代求解一次同余式组(见同余)的方法.是数论中一个重要定理.又称中国剩余定理. 中国剩余定理------ 解法如下:假设存在一个数M M%A=a , M%B=b , ...

  2. 中国剩余定理(孙子定理)学习笔记

    参考博客:https://blog.csdn.net/S_999999/article/details/89298179 啥是中国剩余定理 孙子定理是中国古代求解一次同余式组(见同余)的方法.是数论中 ...

  3. 中国剩余定理(孙子定理)的算法实现(基于miracl大数运算库)

    中国剩余定理(孙子定理)的算法实现: 一.实现目标: 根据中国剩余定理,设正整数两两互素,那么对于任意k个整数,同余方程组: 必有解,模的解数为1.方程组元素的传入是通过文本文件读入的,顺序是,,每个 ...

  4. 中国剩余定理(孙子定理) 原理及模板代码

    背景简介 孙子定理是中国古代求解一次同余式组的方法.是数论中一个重要定理.又称中国余数定理.一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作<孙子算经>卷下第二十六题 ...

  5. 组合数学-中国剩余定理(孙子定理)

    中国剩余定理 乘法逆元 乘法逆元的定义 乘法逆元的计算 这里采用的方式是穷举法,一遍一遍试出满足条件的最小x值,通常采用编程方式去找出x. 中国剩余定理(孙子定理)的定义及解法 上面定理的证明需要一个 ...

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

    中国剩余定理,也称孙子定理,是中国古代求解一次同余式组的重要方法. <孙子算经>里面的"物不知数"说的是这样的一个题目:一堆东西不知道具体数目,3个一数剩2个,5个一数 ...

  7. 数论 之 中国剩余定理(孙子定理)

    1.中国剩余定理理解: 剩余定理,顾名思义就是和余数有关的操作,比如中国剩余定理解决的经典问题: 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3 余2), ...

  8. 中国剩余定理(孙子定理)+ exgcd求逆元

    中国剩余定理   中国剩余定理又叫孙子定理.在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之 剩二(除以7余2) ...

  9. 算法——中国剩余定理(孙子定理)

    借15级上机的一道题数论の重逢来总结一下中国剩余定理 先举一个小例子 问题:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 说明白一点就是说,存在一个数x,除以3余2,除以5余三 ...

  10. 数学--数论--中国剩余定理+扩展中国剩余定理(孙子定理)

    中国剩余定理 问题 求解同余方程组 其中m1,m2,m3...mkm_1,m_2,m_3...m_km1​,m2​,m3​...mk​为两两互质的整数 求x的最小非负整数解 定理 令M=∏i=1kmi ...

最新文章

  1. 基于Redis实现一个分布式锁
  2. 模拟播放器倒计时效果
  3. 接口-----java
  4. gSLICr: SLIC superpixels at over 250Hz
  5. Excel 2016双击文件打开为空白的解决办法-亲测解决。
  6. bzoj 1628 1683: [Usaco2007 Demo]City skyline(模拟)
  7. JSP项目《教师年终个人成果统计系统的设计与应用》实战(一)——密码加密算法...
  8. Boyer-Moore-Horspool-Sunday 算法
  9. 基于springboot的在线考试系统
  10. 免费直播编码软件应用技巧
  11. 罗技 连点 脚本_罗技G宣布与《英雄联盟》合作 推出一系列游戏周边产品
  12. 天津理工大学嵌入式实验 Fritzing电路图连线,自定义芯片原理图方法
  13. Nacos 注册中心的设计原理详解
  14. R语言可视化——画脸谱图
  15. m3u8转换到mp4 python_python实现m3u8格式转换为mp4视频格式
  16. 如何换ionic里面的图标
  17. html鼠标滑过导航条展开导航条,JS+CSS实现鼠标滑过时动态翻滚的导航条效果
  18. 【JokerのKCU105】SGMII。
  19. PAT 1157:校庆
  20. 【艾特淘】淘宝“催发货”任务工单正式上线!

热门文章

  1. conda切换清华源
  2. Javassist 指南1
  3. 【03173】2021年10月高等教育自学考试-软件开发工具
  4. 诚之和:家乐福大动作!要把100家店改为付费会员店
  5. SparkCore项目实战 需求一Top10热门品类 需求二Top10热门品类下每个品类的Top10活跃用户统计 需求三计算页面单跳转换率
  6. @Autowired 构造方法作用
  7. git推送代码到(码云)(github)
  8. Python接入PayPal支付
  9. 2018天猫双11全球狂欢节全天交易额2135亿元
  10. 面试不说点分布式的东西,面试官都有点看不起我呀