数论 —— 线性同余方程组与中国剩余定理
【线性同余方程组】
由若干个线性同余方程构成的线性方程组。
例如:
其解法最早由我国《孙子算经》给出,因此解法称为“孙子定理”,又叫“中国剩余定理”,实质即为求多个数的最小公倍数。
【中国剩余定理】
1.内容
设自然数 两两互质,并记 ,则同余方程组: 在模 N 同余的意义下,有唯一解:。
2.证明
考虑方程组:,
由于 两两互质,对方程组作变量替换,即令
故方程组等价于解同余方程:
若想得到特解
只要令 即可
故方程组的解为:,在模 N 下值唯一。
3.应用
中国剩余定理就是用来求线性同余方程组的,即对方程组:,在 W、B 的值已知,且 W[i]>0,W[i] 与 W[j] 互质,求 a 的值。
4.实现
#include<iostream>
using namespace std;
int Extended_GCD(int a,int b,int &x,int &y){if(b==0){x=1;y=0;return a;}int gcd=Extended_GCD(b,a%b,y,x);y=y-a/b*x;return gcd;
}
int China(int W[],int B[],int k){//W除数,B余数int mod=1;for(int i=0;i<k;i++)//计算mod的大小mod*=W[i];int res=0;int x,y,m;for(int i=0;i<k;i++){m=mod/W[i];Extended_GCD(W[i],m,x,y);//求出每一组W[i]与m的解res=(res+y*B[i]*mod/W[i]+mod)%mod;//累加所有解}return (res+mod)%mod;
}
【不互素的中国剩余定理】
对于不互素的中国剩余定理, 即:a[1],a[2],.....,a[n],不互素的情况,只能每两个一组的求解,有:
设:k1、k2 ,易得:
即:
对整个式子进行 a2 取余,得:
此时式子只有一个未知量 k1,使用扩展欧几里得定理可求出 k1,从而计算出:
这个 x 仅是满足 的一个特解,不一定是 的解,因此要想求出式子真正的解,需要取 x 对 a1、a2 最小公倍数的模
即:
由于只有 ans 是未知数,因此就将两个式子转换为一个式子,通过这样不断的合并,可以求出最终的结果。
判断是否有解,在扩展欧几里得中求 k1 时判断即可。
int Extended_GCD(int a,int b,int &x,int &y){if(b==0){x=1;y=0;return a;}LL gcd=Extended_GCD(b,a%b,y,x);y=y-a/b*x;return gcd;
}
int GCD(int a,int b){return b==0?a:GCD(b,a%b);
}
int CRT(int W[],int B[],int n)//w为除数,b为余数,n为有多少式子
{int res=B[0],Wi=W[0];for(int i=1;i<n;i++){int bi=B[i],wi=W[i];int x,y;int gcd=Extended_GCD(Wi,wi,x,y);int c=bi-res;if(c%gcd!=0)//表示没有结果return -1;int M=wi/gcd;res+=Wi*( ((c/gcd*x)%M+M) % M);Wi*=M;}if(res==0)//除数全为0{res=1;for(int i=0;i<n;i++)res=res*W[i]/GCD(res,(LL)W[i]);}return res;
}
int a[N],b[N];
int main(){int k;while(scanf("%d",&k)!=EOF&&k){for(LL i=0;i<k;i++)scanf("%d%d",&a[i],&b[i]);//先除数后余数printf("%d\n",CRT(a,b,k));}return 0;
}
【例题】
- Biorhythms(POJ-1006)(中国剩余定理):点击这里
- Monkey Tradition(LightOJ-1319)(中国剩余定理):点击这里
- Strange Way to Express Integers(POJ-2891)(不互素的中国剩余定理):点击这里
数论 —— 线性同余方程组与中国剩余定理相关推荐
- 基础数论算法(4) 中国剩余定理
最后的gcd相关! 中国剩余定理是这么一个问题. "今有物不知其数,三三数之余二,五五数之余三,七七数之余二.问物几何?" 答曰:二十三.口诀:三人同行七十稀,五树梅花廿一枝,七子 ...
- ACM数论----中国剩余定理与拓展中国剩余定理
一.问题引入: 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?"这个问 ...
- 线性同余方程组-中国剩余定理or合并方程
线性同余方程组 完整代码见https://github.com/YIWANFENG/Algorithm-github 即若干个线性同余方程的组合. 求解方式可以参考我们普通的方程组,先解式1,将式1的 ...
- 数论常用内容——中国剩余定理
中国剩余定理 中国剩余定理是中国古代求解一次同余式组(见同余)的方法.是数论中一个重要定理.又称孙子定理. 用现代数学的语言来说明的话,中国剩余定理给出了下图所示的一元线性同余方程组有解的判定条件,并 ...
- 初等数论--同余方程--同余方程组:中国剩余定理
初等数论--同余方程--同余方程组:中国剩余定理 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列:初等数论 ...
- 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法
打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...
- 与数论的厮守04:扩展中国剩余定理
根据数论的尿性,一般的定理解决不了的问题怎么办?那就拓展一下呗. 我们先看中国剩余定理,它解决的是一堆同余方程:nΞa1(mod b1),nΞa2(mod b2)...nΞak(mod bk),其中b ...
- 【数论】同余(四):一元线性同余方程组(两两相消、中国剩余定理)
同余问题共7part,我的博客链接: 基本概念与性质 逆元:概念.求解方法与推导 线性同余方程 一元线性同余方程 一元线性同余方程组 多元线性同余方程 高次同余方程:BSGS算法(大小步算法.拔山盖世 ...
- 数论专题笔记(1)——同余,整除,欧拉定理,中国剩余定理
一. 同余定义:给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m).对模m同余是整数的一个等价关系. 显然 ...
最新文章
- kalilinux安装搜狗输入法
- nginx启动不了_nginx 变量与监控
- 智能摄像头——小觅智能摄像头
- element显示服务器的图片,使用element文件上传图片转base64字节传到服务器
- 纽微特记事:刚内斗胜利,就说业务难做
- eclipse生成ant build.xml打war包
- 基于Nonebot框架的QQ机器人词库生成器
- 蒸汽管道图纸符号_水暖工程图纸中的符号表示
- IntelliJ IDEA 2016.2 注册破解激活教程
- 带小数的二进制转十进制(C代码)
- 云计算场景下,如何快速定位出虚拟机reboot/shutdown引发的故障
- 使用Windows批处理+ImageMagick 实现批量处理图片
- EMNIST: an extension of MNIST to handwritten letters(数据集简介)
- Age of Information(AoI)大体介绍与相关工作
- 华三H3C交换机如何配置堆叠irf虚拟化之如何配置检测机制(配置BFD MAD检测)
- TIA WinCC Unified入门经典
- 大厂iOS APP都用了哪些第三方库?
- 塘沽区学计算机考证去哪
- Tomoyo Fighter - Perfect 界面汉化+修改器
- 谭浩强C++ 第四章
热门文章
- 程序员心声:我为什么偏爱苹果电脑和Mac OS X
- 实时的毛发绘制 szlongman
- 华为程序员写代码十几年没有被拿去“祭天”,靠的是这5条口诀
- java getCause()与e.getMessage() 异常日志区别
- springboot2.0集成activiti modeler
- UI标签库专题十三:JEECG智能开发平台 ckfinder(ckfinder插件标签)
- JEECG开源社区招收学生说明
- Linux常用命令(第二版) --权限管理命令
- 协议形式化安全分析 Scyther 并非所有协议可以照抄就搬
- 智能驾驶正文 0 揭秘 ISO 21448,它是自动驾驶行业的新风向标?