各位好啊,这里是蒟蒻gigo_64的第一篇博客,,这里我们开始啦。

本文需要读者知晓扩展欧几里得,如果不会请点击这个大佬的链接;https://blog.csdn.net/sslz_fsy/article/details/81566257

中国剩余定理是用来求解一个方程组的。这个方程组如下:

怎么办呢,,我想求一个x怎么办呢,,

好我们引入中国剩余定理。

1.中国剩余定理

首先我们给出一个条件:所有mi互质。好像看起来没有什么用。

现在,我们定义一些量:

ai:如题。

mi:如题。

M:所有mi的乘积。

Mi:M/mi。(也就是除了mi之外其它m的乘积)

Mi^-1:Mi模mi时的逆元。

所谓中国剩余定理,就是指

接下来我们来证明为什么如此。

首先因为Mi^-1是Mi的逆元,所以,即

因为Mi是包含mj的(j!=i),所以明显,即

既然如此,将这些东西累加起来,对于每个mi只有其自己的影响。则

后面那个t*M是一个通解,因为M是所有m的乘积所以肯定满足

那么我们得到了中国剩余定理:(所有m互质)

上代码吧。

但我现在可以引入中国剩余定理·扩展

2.扩展中国剩余定理。

定义很简单,中国剩余定理的基础上加上了!!!m不一定互质!!!

这下会很麻烦,,因为m不一定互质会让之前推出剩余定理的过程一开始就不成立。

对此,我们可以使用这样一个技能。

假设你现在得到了满足前k个方程的通解x。

正如我刚刚所说,x的通解是加上了t*M的,可惜这个M是前k个m的最小公倍数,而不是所有m的。

我们设前k个方程的通解为ans,之前的M为lcm,下一个方程为x=a[k+1](mod m[k+1]);

那我们现在的目标是让x满足前面方程的前提下满足x=a[k+1](mod m[k+1]);

也就是说,要满足ans+t*lcm=a[k+1]+m[k+1]*y;

恒等变形得到t*lcm-y*m[k+1]=a[k+1]-ans;并且我把减号改成加好不会有问题因为y是没什么用的。

所以t*lcm+y*m[k+1]=a[k+1]-ans好像很眼熟,

这是个扩展欧几里得的模板样子的等式,lcm,m[k+1],a[k+1],ans都是已知。

直接上扩欧的模板exgcd(lcm,m[k+1])就可以得到t,并且在得到t的过程中顺带得到lcm与m[k+1]的最大公约数gcd

要注意一个事实,就是我们求到的t是满足左边=gcd而非a[k+1]-ans的。

那直接让t=t/gcd*(a[k+1]-ans)。因为t是整数,所以如果(a[k+1]-ans)%gcd!=0的话,这个方程组无解。

现在我们得到了真正的t,那新的ans=ans+t*lcm;

一定要在更新完ans后再更新lcm。lcm=lcm*m[i]/gcd;(两个数的最小公倍数就是两数相乘除以最大公约数嘛)

然后记得ans要取模不然极可能爆long long。ans=(ans%lcm+lcm)%lcm;

上代码,带注释,这里是洛谷4777,因为会爆longlong所以用快速幂分解处理了t*lcm。

#include<bits/stdc++.h>
using namespace std;
long long n;
long long a[100003],m[100003],M=1,ans,x,y,gcd;
void exgcd(long long a,long long b,long long &x,long long &y){if(!b){x=1,y=0;gcd=a;return;//就是扩欧模板,不知道的可以去sslz_fsy那里看模板ovo }exgcd(b,a%b,y,x);y-=a/b*x;
}long long t;
void mul(long long a,long long b,long long p){long long ans=0;while(b){//将两个数相乘分解成很多个数*b的和,边加边%防止爆longlong if(b&1)ans+=a,ans%=p;a=a*2%p;b>>=1;}//可以自己理解一下 t=ans;//看,这个才是真正的t
}
int main(){cin>>n;for(register int i=1;i<=n;i++)scanf("%lld %lld",&m[i],&a[i]);long long lcm=m[1],ans=a[1];//第一个方程直接上 for(register int i=2;i<=n;i++){long long c=(a[i]-ans%m[i]+m[i])%m[i];//防止爆炸的模加模,c就是a[k+1]-ans exgcd(lcm,m[i],x,y);//求出的x是初步的假t ,顺带求出gcd mul(x,c/gcd,m[i]/gcd);//意思是x*(c/gcd)%m[i]/gcd ans+=t*lcm;//经过mul得到的t就是真正的t啦,直接加 lcm=lcm*m[i]/gcd;//更新lcm ans=(ans%lcm+lcm)%lcm;//防止爆炸的模加模 }cout<<ans;//万恶的cout return 0;
}

我的第一篇博客非常非常非常啰嗦。希望以后自己能看得懂哈哈哈

请多指教啦ovo

博客处女作:中国剩余定理与扩展中国剩余定理相关推荐

  1. 中国剩余定理与扩展中国剩余定理

    中国剩余定理又名孙子定理 用来求解同余线性方程组 其中m1,m2,m3-两两互质,求x的最小整数解: 设M为m1,m2,m3-的公倍数. 根据上面的推导,为什么x的通解形式是累加呢? 根据上面推导,推 ...

  2. 中国剩余定理及扩展中国剩余定理

    目录 中国剩余定理CRT 扩展中国剩余定理ExCRT TJOI2009 猜数字 HDU 1573 X问题 中国剩余定理CRT 中国剩余定理是用来求线性同于方程组的. \[ \begin{aligned ...

  3. 中国剩余定理以及扩展中国剩余定理

    中国剩余定理必须有两两互质的条件:而扩展中国剩余定理没有限制(可能互质,也能不互质).所以只记忆一个扩展中国剩余定理的板子就行. 代码 #include <iostream> #inclu ...

  4. 中国剩余定理学习 拓展中国剩余定理

    中国剩余定理学习 && 拓展中国剩余定理 中国剩余定理: 拓展中国剩余定理: 中国剩余定理: 仅供自己复习时查看一下大佬笔记,详细学习过程在大佬的博客. 学习连接:https://ww ...

  5. ACM数论----中国剩余定理与拓展中国剩余定理

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

  6. 【原创】 中国剩余定理 和 拓展中国剩余定理

    孙子 Preface 数论学习Part 7. 每天进步一点点,退役不会太丢脸. 联赛只剩十五天,隔靴搔痒智何添? 剩余定理四天一篇,动归图论又几何,数据结构似云烟. 莫再等闲,莫忘时间. CRT 我们 ...

  7. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  8. 与数论的厮守04:扩展中国剩余定理

    根据数论的尿性,一般的定理解决不了的问题怎么办?那就拓展一下呗. 我们先看中国剩余定理,它解决的是一堆同余方程:nΞa1(mod b1),nΞa2(mod b2)...nΞak(mod bk),其中b ...

  9. 中国剩余定理扩展中国剩余定理

    中国剩余定理(CRT): 若 m1, m2,...,mk  两两互质,则同余方程组 x≡a1 (mod m1) x≡a2 (mod m2) ------- x≡ak (mod mk) 有整数解,解为 ...

最新文章

  1. 大牛出品:TensorFlow 2.0入门指南
  2. java使用ZipOutputStream对文件进行压缩
  3. Docker教程-简介
  4. 博人眼球的 电子苍蝇
  5. 2019人工智能实战 第六次作业 段峙宇
  6. Android切换泰语,Android应用内切换语言
  7. 使用Maven将文件上传和下载到S3
  8. 程序分身:根据不同程序名执行不同函数
  9. mac的python怎么输入中文_无法在python IDE(Mac OS X)中输入unicode
  10. impala java api 操作_Impala实践之六:使用Rest Api
  11. IMAXB6充电器使用教程
  12. java 包含字符串 个数_java查找字符串中的包含子字符串的个数实现代码
  13. 超级好用论文写作工具NoteExpress下载和安装
  14. 宇视交换机vlan路由配置指导
  15. 【视频剪辑】Pr剪切素材时常用快捷键及素材快进快退
  16. 20162327WJH Android开发程序设计实验报告
  17. 数字电路中几种基本门电路
  18. 《海洋测绘》:从地方坐标系到2000国家大地坐标系的转换方法
  19. 英语词汇篇 - 构词法
  20. wdcp mysql configure error_install Error: mysql configure err

热门文章

  1. oracle去重函数
  2. 计算机编目会遵循什么格式,编目的必备字段有哪些?
  3. 啊!公众号破1万粉了!!!
  4. 蒋鑫鸿:9.10国际黄金原油最新外盘行情趋势点评附解一套技术指导
  5. 数字通信第四章——波形解调与最佳检测接收
  6. 好的服务如何开发设计
  7. PostgreSQL之Json类型使用
  8. Learning Taxonomy丨全网首发:企业内容分类法应用指南Ⅰ
  9. win10系统svn服务器端安装步骤,win10系统安装TortoiseSVN的操作方法
  10. EMQX 常见端口说明