本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia

题目大意

求解一组同余方程
x ≡ r1 (mod a1)
x ≡ r2 (mod a2)
x ≡ r3 (mod a3)
......
x ≡ rk (mod ak)
的解x(a1,a2,a3,.....ak 并不一定互质)。如果不存在则输出-1.

输入格式

有多组数据,每组数组第一行为k,后面有k行,每行两个数,代表ai,ri。

输出格式

每一行对应每一个询问的解x。

样例输入

2
8 7
11 9

样例输出

31

分析

看到这一题,可以发现好像问的就是中国剩余定理的问题,可是题目中a并不互质,无法用中国剩余定理来解决。不过我们可以从扩展欧几里德算法入手。

先来分析规模小一点的。

对于一组同余方程

\(\begin {cases} x \mod a_1=r_1\\ x\mod a_2=r_2\end{cases}\to\begin{cases}k_1*a_1+r_1=x\\ k_2* a_2+r_2=x\end {cases}\)

我们可以上下两式相减得出

$ k_1* a_1-k_2* a_2=r_2-r_1$

我们可以发现,这个式子可以用扩展欧几里德来求解。于是我们求出了\(k_1\)
便可以将其带入原来的式子,求出\(x=k_1*a_1+r_1\)。这是两个方程的求解,面对多个方程,我们可以这样做:
假设我们刚才求出的是\(x_1\),而为了求出满足三个方程的解\(x_2\)我们可以得到这样的式子
\(\begin {cases} x_2\mod lcm(a_1,a_2)=x_1\\ x_2\mod a_3=r_3\end{cases}\)
证明:

\(x_2=k_3*lcm(a_1,a_2)+x_1\) ,因为\(k_3*lcm(a_1,a_2)\)这一块肯定能整除\(a_1\)或\(a_2\),所以肯定会剩下一个\(c_1\),而\(c_1\)恰好满足前面的方程

用同样的方法,我们可以求出满足所有式子的解。

#include <cstdio>
#include <iostream>
#include <cmath>
#include <queue>
#include <algorithm>
#include <cstring>
#include <climits>
#define MAXN 10000+10
#define abs(a) a>0?a:-a
using namespace std;
long long e_gcd(long long a,long long b,long long& x,long long& y)
{if(!b){x=1;y=0;return a;}long long ans=e_gcd(b,a%b,x,y);long long tmp=x;x=y;y=tmp-a/b*y;return ans;
}
long long a1,a2,b1,b2,x,y,gcd,t,c;
int main()
{while(scanf("%lld",&t)!=EOF){scanf("%lld%lld",&a1,&b1);int flag=0;if(t==1) printf("%lld\n",b1);else{for(int i=2;i<=t;i++){   scanf("%lld%lld",&a2,&b2);if(flag)  continue;gcd=e_gcd(a1,a2,x,y);if((b2-b1)%gcd!=0) {flag=1;}x*=(b2-b1)/gcd;x%=a2/gcd;if(x<0) x+=abs(a2/gcd);c=a1*x+b1;a1=a1/gcd*a2; b1=c;}}if(flag==1) {printf("-1\n");continue;}      printf("%lld\n",c);}return 0;
}

转载于:https://www.cnblogs.com/yangyaojia/p/6421628.html

POJ2891 Strange Way to Express Integers (扩展欧几里德)相关推荐

  1. POJ 2891 Strange Way to Express Integers ★ (扩展欧几里德解同余式组)

    题目链接:http://poj.org/problem?id=2891 题目大意: 很好的一道题,解同余式组: x = r1 (mod m1) x = r2 (mod m2) -- x = rp (m ...

  2. POJ2891 Strange Way to Express Integers【扩展中国剩余定理】

    题目大意 就是模板...没啥好说的 思路 因为模数不互质,所以直接中国剩余定理肯定是不对的 然后就考虑怎么合并两个同余方程 \(ans = a_1 + x_1 * m_1 = a_2 + x_2 * ...

  3. poj-2891(Strange Way to Express Integers)--中国剩余定理扩展欧几里得

    题意:找到一个m,使得m%ai=ri,并且这个m最小 m = a1*x + r1; m = a2*y + r2; 可得:a1*x - a2*y = r2 - r1 可得:a1*x ≡ r2-r1(mo ...

  4. [POJ2891] Strange Way to Express Integers

    题目描述 FJ正在读佳佳写的一本书,书中描述一种表示非负整数的方法:选择k个不同的正整数a1,a2,-,ak,对于某个整数m分别对ai求余对应整数ri,如果适当选择a1,a2,-,ak,那么整数m可由 ...

  5. POJ2891 Strange Way to Express Integers

    线性同余方程 题目传送门 解线性同余方程的简单应用,注意要把数据读完再输出-1. 代码: #include<cstdio> #include<cstring> #include ...

  6. POJ2891——Strange Way to Express Integers(一元线性同余方程组)

    由若干个一元线性同余方程组构成的方程组,叫做一元线同余方程组. 求解 我们可以将其统一划成a*x ≡ b(mod m)的形式,这样有利于算法的实现. 对于同于方程组的求解,其实质过程就是对于其中的同余 ...

  7. 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)

    虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...

  8. 【poj 2891】Strange Way to Express Integers(数论--拓展欧几里德 求解同余方程组 模版题)...

    题意:Elina看一本刘汝佳的书(O_O*),里面介绍了一种奇怪的方法表示一个非负整数 m .也就是有 k 对 ( ai , ri ) 可以这样表示--m%ai=ri.问 m 的最小值. 解法:拓展欧 ...

  9. 【poj2891】 Strange Way to Express Integers

    poj.org/problem?id=2891 (题目链接) 题意:求解线性同余方程组,不保证模数一定两两互质. Solotion 用exgcd将俩个同余方程合并成一个 如合并n%M=R,n%m=r ...

最新文章

  1. android mp3 lrc歌词文件utf-8歌词显示为乱码,Android读取本地json文件的方法(解决显示乱码问题)...
  2. flask 读取 csv
  3. android phone驱动_一文带你掌握 Android 系统架构
  4. boost::gil模块数字扩展中的 convolve_rows() 和 convolve_cols() 示例
  5. 【动态规划】【线段树】 Codeforces Round #426 (Div. 1) B. The Bakery
  6. 《Tensorflow 实战google深度学习框架》第二版源代码
  7. 十大笔记本品牌型号命名规则【惠普】
  8. php小程序支付notify,PHP 小程序支付
  9. 超大数据量操作 java程序优化[转载]
  10. 粒子滤波简介(转载)
  11. Html 解决长串英文字母显示不能自动换行
  12. Linux里sra文件是什么,生信软件 | Sratools (操作SRA文件)
  13. libiec61850 1.5.1 新版本
  14. 深度学习中的优化算法如何理解--SGD
  15. 搜狗推送接口-搜狗推送口子
  16. Attention Mechanisms in Computer Vision: A Survey(四)
  17. Django建网站教程
  18. 试图加载格式不正确的程序 解决方法
  19. 目标检测论文阅读:GFL算法笔记
  20. 【WPF】CAD工程图纸转WPF可直接使用的xaml代码技巧

热门文章

  1. jstack命令使用
  2. 远离你身边消极爱抱怨的人!!
  3. 关于《高性能JavaScript》制表(Memoization)笔记
  4. 求生之路2浩方联机开始显示服务器,求生之路2怎么联机_求生之路2浩方联机教程_快吧单机游戏...
  5. 修复Net4.0在IE11下doPostBack无效的问题
  6. sql 把特定数据排在最前面
  7. 11-Flutter移动电商实战-首页_屏幕适配方案和制作
  8. 10、jeecg 默认为空的字段值是如何被填充的?
  9. mac 通过 homebrew 安装mongodb
  10. 判断浏览器是否为手机端 is mobile