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

用来求解同余线性方程组
其中m1,m2,m3…两两互质,求x的最小整数解;

设M为m1,m2,m3…的公倍数。


根据上面的推导,为什么x的通解形式是累加呢?

根据上面推导,推导出x的解,接下来就可以开始写题了。
https://www.luogu.org/problemnew/show/P3868 一道模板题

附上完整代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fin(a,n) for(int i=a;i<=n;i++)
const int maxn=20;
ll a1[20],b1[20];
ll mul(ll a,ll b,ll mod)//求(a*b)%mod ,防止a*b炸ll
{ll ans=0;while(b>0){if(b&1)ans=(ans+a)%mod;//如果b对答案有贡献 a=(a+a)%mod;b>>=1;}return ans;
}
ll exgcd(ll a,ll b,ll &x,ll &y)//扩展欧几里得
{if(b==0){x=1;y=0;return a;}ll ans=exgcd(b,a%b,x,y);ll temp=x;x=y;y=temp-(a/b)*y;return ans;
}
ll china(int n)//中国剩余定理
{ll M=1,ans=0,x,y;fin(1,n)M*=b1[i]; fin(1,n){ll a,b;a=M/b1[i];//此处的按照ax+by=1的形式,因为互素所以等号右边恒为1.b=b1[i];exgcd(a,b,x,y);x=(x%b+b)%b;//求出最小的x ans=(ans+mul(mul(a,x,M),a1[i],M))%M;//此处对应求和即ai*xi*mi }return (ans+M)%M;
}
int main()
{int n;scanf("%d",&n);fin(1,n)scanf("%lld",&a1[i]);fin(1,n)scanf("%lld",&b1[i]);fin(1,n)a1[i]=(a1[i]%b1[i]+b1[i])%b1[i];//预处理数据 ll tans=china(n);printf("%lld",tans);
}

孙子定理,证毕

扩展中国剩余定理,相同的方程

但此处,m1,m2….两两不互质
这时怎么推解呢?如下图


看到上述方程是不是就明白了?我们可以根据递推,把通解带进下一个方程,看看有没有解,不就是整个方程有没有解吗?
上面的方程只有k一个未知数,用扩展欧几里得求出最小的k 值,然后再把答案更新一遍,不断的往下推。大功告成!
给两道模板题
https://www.luogu.org/problemnew/show/P4777
https://cn.vjudge.net/problem/POJ-2891
两道都是模板题,区别在于POJ上的需要多组数据输出。
附上完整代码

#include<iostream>
#include<cstdio>
using namespace std;
#define fin(a,n) for(int i=a;i<=n;i++)
#define ll long long int
const int maxn=2e5+10;
ll a[maxn],b[maxn];
ll exgcd(ll a,ll b,ll &x,ll &y)
{if(b==0){x=1;y=0;return a;}ll gcd=exgcd(b,a%b,x,y);ll temp=x;x=y;y=temp-a/b*y;return gcd;
}
ll mul(ll a,ll b,ll mod)//快速乘法
{   ll res=0;while(b>0){if(b&1)res=(res+a)%mod;a=(a+a)%mod;b>>=1;}return res;
}
ll gcd(ll a,ll b)
{return b?gcd(b,a%b):a;
}
ll exchi(int k)
{ll a0,b0;a0=a[1];b0=b[1];fin(2,k){ll a1=a[i],b1=b[i];ll gd=gcd(a1,a0);//gcd if((b1-b0)%gd!=0)return -1;//b0表示之前方程的答案,此处b1-b0表示方程的右边 ll x,y;exgcd(a0,a1,x,y);//a0为累乘的最小公倍数,a1为当前的模值 x*=(b1-b0)/gd;//根据扩展欧几里得,出来的结果是ax+by=gcd的值,所以缩小之后需要放大 a1*=a0/gd;//a1表示最小公倍数 b0=(mul(x,a0,a1)+b0)%a1;//把答案最小化 mul中表示x*a0%a1;a0=a1;//代换递推 }return (b0%a0+a0)%a0;//最小化答案
}
int main()
{   int n; while(~scanf("%d",&n)){fin(1,n)scanf("%lld %lld",&a[i],&b[i]);ll tans=exchi(n);printf("%lld\n",tans);}}

中国剩余定理与扩展中国剩余定理相关推荐

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

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

  2. 博客处女作:中国剩余定理与扩展中国剩余定理

    各位好啊,这里是蒟蒻gigo_64的第一篇博客,,这里我们开始啦. 本文需要读者知晓扩展欧几里得,如果不会请点击这个大佬的链接;https://blog.csdn.net/sslz_fsy/artic ...

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

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

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

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

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

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

  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. python程序设计梁勇 百度网盘_20194220 2019-2020-2 《Python程序设计》实验二报告
  2. 【JAVA学习笔记】个人设定
  3. C++ 编写DLL文件给易语言调用
  4. kettle连接不上es7_kettle8.2连接ElasticSearch7
  5. python从数据库取数据保存为excel_python读取数据库表数据并写入excel
  6. 10 个 GitHub 上超火的 CSS 奇技淫巧项目,找到写 CSS 的灵感!
  7. Css网格布局-Grid布局
  8. 高仿微信对话列表滑动删除效果
  9. 推荐一款免费国产远程办公神器ToDesk,TeamViewer完美替代品
  10. 一文详解Serverless架构模式
  11. 【数据结构与算法】分离链接法散列表的Java实现
  12. vue去掉#——History模式
  13. 计算机办公自动化试题及答案,计算机等级考试,办公自动化考试试题(三)
  14. excel表格如何转换成word表格_还不会转换格式?教你一招,Excel表格完美转换成Word文档...
  15. NYOJ 137 取石子(三)(教主神题)
  16. 手绘风格的白板Excalidraw
  17. 【Bioinformatics】背曲拇指与 Ehlers-Danlos syndrome
  18. 大学四年级(yuan)
  19. Pix4Dmapper安装
  20. VMware Workstation 不可恢复错误: (vcpu-1) Exception 0xc0000005 (access viola

热门文章

  1. 数字电子技术课程设计——盲人报时钟
  2. 设备安装CoreELEC系统,并配置遥控:实现低成本NAS影音播放器
  3. Ubuntu双网卡共享上网 外网 内网
  4. 魔兽世界服务器维护12月13日,3月27日服务器维护提前完成 更新12M工具补丁
  5. 【原创】谈一个数学教育专业的IT职业生涯
  6. 安装配置管理 之 为 Canon PIXMA iP1000 喷墨打印机安装驱动程序
  7. 《HFSS电磁仿真设计从入门到精通》一2.1 设计概述
  8. MySQL规范及优化
  9. cisco b 系列 c 系列 服务器,UCS B系列/C系列/S系列/HyperFlex系列组合,与Cisco VIC卡绑定选项...
  10. VBA Trim()函数 去除头部和尾部的空格 - VBA函数学习笔记(二)