解一元线性同余方程组(模数不互质)

结合看这俩blog讲得不错

http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/qq_27599517/article/details/50887445

上面这个对于理解为什么要用最小公倍数有帮助

http://blog.csdn.net/thearcticocean/article/details/49452859

思路就是不断两两合并,成一元线性同余方程,然后不断用扩欧求解

由于是最小的正整数解,而非非负整数解,所以最后答案如果是0,要加上模数的最小公倍数

#include<cstdio>
using namespace std;
int a[10],r[10],T,n;
void exgcd(int a,int b,int &d,int &x,int &y)
{
if(!b)
{
d=a;
x=1;
y=0;
}
else
{
exgcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}
int main(){
// freopen("c.in","r",stdin);
scanf("%d",&T);
for(int zu=1;zu<=T;++zu){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;++i){
scanf("%d",&r[i]);
}
int a1=a[1],r1=r[1];
for(int i=2;i<=n;++i){
int a2=a[i],r2=r[i];
int d,x0,y0;
int c=r2-r1;
exgcd(a1,a2,d,x0,y0);
if(c%d){
r1=-1;
break;
}
int t=a2/d;
x0=(x0*(c/d)%t+t)%t;
r1=a1*x0+r1;
a1=a1*(a2/d);
}
printf("Case %d: %d\n",zu,r1==0 ? r1+a1 : r1);
}
return 0;
}

最新文章

  1. Qt界面中嵌入其他exe程序的界面,使用Qt5
  2. 【JavaScript中的正则表达式】
  3. UML之类图
  4. python 100例 (持续更新)
  5. 在linux下安装Xwindows
  6. 《APUE》第五章笔记
  7. web工程中spring+ibatis的单元测试--转载
  8. PHP获得文件的md5并检验是否被修改
  9. 《算法问题实战策略》-chaper8-动态规划法
  10. RESTful API -备
  11. maven问题:org.springframewor.web.filter.CharacterEncodingFileter不能强转为javax.servlet.Filter
  12. struts2-第一章-基础用法3
  13. 基于WanAndroid开放API实现的文章阅读APP
  14. oo第3次博客作业
  15. python3+cv2+andiord安卓摄像头
  16. iOS 开发:绘制像素到屏幕
  17. 进程表示之进程ID号
  18. 6--Python入门--Python基本运算符
  19. ASP.NET Request.Cookies获取某个Cookie的奇怪问题
  20. 转 git push 提示 Everything up-to-date

热门文章

  1. Unix/Linux Command Reference
  2. SUSE 11.3 linux ISO下载地址
  3. 机器学习开源项目精选TOP30
  4. 异步网络模块之aiohttp的使用(一)
  5. C 封装一个通用链表 和 一个简单字符串开发库
  6. LeetCode解题报告—— Trapping Rain Water
  7. Bootstrap框架的简介
  8. Linux下文件属性
  9. javascript大神修炼记(4)——循环
  10. Web测试中容易被忽略的Charset问题