中国剩余定理(又称孙子定理)
中国剩余定理,又名孙子定理
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 ]
中国剩余定理(又称孙子定理)相关推荐
- 中国剩余定理 即 孙子定理
中国剩余定理 即 孙子定理 . 中国古代求解一次同余式组(见同余)的方法.是数论中一个重要定理.又称中国剩余定理. 中国剩余定理------ 解法如下:假设存在一个数M M%A=a , M%B=b , ...
- 中国剩余定理(孙子定理)学习笔记
参考博客:https://blog.csdn.net/S_999999/article/details/89298179 啥是中国剩余定理 孙子定理是中国古代求解一次同余式组(见同余)的方法.是数论中 ...
- 中国剩余定理(孙子定理)的算法实现(基于miracl大数运算库)
中国剩余定理(孙子定理)的算法实现: 一.实现目标: 根据中国剩余定理,设正整数两两互素,那么对于任意k个整数,同余方程组: 必有解,模的解数为1.方程组元素的传入是通过文本文件读入的,顺序是,,每个 ...
- 中国剩余定理(孙子定理) 原理及模板代码
背景简介 孙子定理是中国古代求解一次同余式组的方法.是数论中一个重要定理.又称中国余数定理.一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作<孙子算经>卷下第二十六题 ...
- 组合数学-中国剩余定理(孙子定理)
中国剩余定理 乘法逆元 乘法逆元的定义 乘法逆元的计算 这里采用的方式是穷举法,一遍一遍试出满足条件的最小x值,通常采用编程方式去找出x. 中国剩余定理(孙子定理)的定义及解法 上面定理的证明需要一个 ...
- 中国剩余定理(孙子定理)
中国剩余定理,也称孙子定理,是中国古代求解一次同余式组的重要方法. <孙子算经>里面的"物不知数"说的是这样的一个题目:一堆东西不知道具体数目,3个一数剩2个,5个一数 ...
- 数论 之 中国剩余定理(孙子定理)
1.中国剩余定理理解: 剩余定理,顾名思义就是和余数有关的操作,比如中国剩余定理解决的经典问题: 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3 余2), ...
- 中国剩余定理(孙子定理)+ exgcd求逆元
中国剩余定理 中国剩余定理又叫孙子定理.在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之 剩二(除以7余2) ...
- 算法——中国剩余定理(孙子定理)
借15级上机的一道题数论の重逢来总结一下中国剩余定理 先举一个小例子 问题:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 说明白一点就是说,存在一个数x,除以3余2,除以5余三 ...
- 数学--数论--中国剩余定理+扩展中国剩余定理(孙子定理)
中国剩余定理 问题 求解同余方程组 其中m1,m2,m3...mkm_1,m_2,m_3...m_km1,m2,m3...mk为两两互质的整数 求x的最小非负整数解 定理 令M=∏i=1kmi ...
最新文章
- 基于Redis实现一个分布式锁
- 模拟播放器倒计时效果
- 接口-----java
- gSLICr: SLIC superpixels at over 250Hz
- Excel 2016双击文件打开为空白的解决办法-亲测解决。
- bzoj 1628 1683: [Usaco2007 Demo]City skyline(模拟)
- JSP项目《教师年终个人成果统计系统的设计与应用》实战(一)——密码加密算法...
- Boyer-Moore-Horspool-Sunday 算法
- 基于springboot的在线考试系统
- 免费直播编码软件应用技巧
- 罗技 连点 脚本_罗技G宣布与《英雄联盟》合作 推出一系列游戏周边产品
- 天津理工大学嵌入式实验 Fritzing电路图连线,自定义芯片原理图方法
- Nacos 注册中心的设计原理详解
- R语言可视化——画脸谱图
- m3u8转换到mp4 python_python实现m3u8格式转换为mp4视频格式
- 如何换ionic里面的图标
- html鼠标滑过导航条展开导航条,JS+CSS实现鼠标滑过时动态翻滚的导航条效果
- 【JokerのKCU105】SGMII。
- PAT 1157:校庆
- 【艾特淘】淘宝“催发货”任务工单正式上线!