题目描述

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


输入格式

输入包含多组测试数据,对于每组测试数据:第一行包含一个整数k;第2到k+1行每行包含两个整数ai,ri。


输出格式

对于每组测试数据输出对应的非负整数m的值,若有多个m,则输出最小的一个;若无解,则输出-1。


样例数据

样例输入

2
8 7
11 9

样例输出

31


说明

All integers in the input and the output are non-negative and can be represented by 64-bit integral types.


题目分析

标准欧几里得解线性方程组,要注意的就是。。无解情况退出前要读完所有当组数据。。
欧几里得解线性方程组


源代码

#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
inline const long long Get_Int() {long long num=0,bj=1;char x=getchar();while(x<'0'||x>'9') {if(x=='-')bj=-1;x=getchar();}while(x>='0'&&x<='9') {num=num*10+x-'0';x=getchar();}return num*bj;
}
long long Exgcd(long long a,long long b,long long &x,long long &y) {if(b==0) {x=1;y=0;return a;}long long ans=Exgcd(b,a%b,x,y),tmp=x;x=y;y=tmp-a/b*y;return ans;
}
long long n;
long long Solve() {long long a1=Get_Int(),r1=Get_Int();for(int i=2; i<=n; i++) {long long a2=Get_Int(),r2=Get_Int(),a=a1,b=a2,c=r2-r1,x0,y0;long long gcd=Exgcd(a,b,x0,y0);if(c%gcd) { //无解for(int j=i+1; j<=n; j++)Get_Int(),Get_Int();return -1;}long long b1=b/gcd;x0=(x0*(c/gcd)%b1+b1)%b1;r1+=a1*x0; //带入原方程组的第一个a1*=(a2/gcd); }return r1;
}
int main() {while(scanf("%lld",&n)!=EOF)printf("%lld\n",Solve());return 0;
}

[POJ2891] Strange Way to Express Integers相关推荐

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

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

  2. 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 ...

  3. POJ2891 Strange Way to Express Integers (扩展欧几里德)

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia 题目大意 求解一组同余方程 x ≡ r1 (mod a1) x ≡ r2 (mod a2) x ≡ r ...

  4. POJ2891 Strange Way to Express Integers

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

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

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

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

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

  7. 【poj2891】 Strange Way to Express Integers

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

  8. poj 2891 Strange Way to Express Integers 2012-09-05

    http://poj.org/problem?id=2891 解线性模方程组. 比较坑爹,数据比较大,很容易溢出. 1 Program poj2891; 2 3 var m:int64; 4 5 a, ...

  9. poj 2891 Strange Way to Express Integers

    题目:http://poj.org/problem?id=2891 思路:扩展欧几里得 #include <cstdio> #include <cstring> #includ ...

最新文章

  1. Android Studio 更换国内源下载依赖库
  2. [luoguP2896] [USACO08FEB]一起吃饭Eating Together(DP)
  3. 【数据结构与算法】之柱状图中最大矩形的求解思路和算法示例
  4. windows配置solr5.5.2(不通过tomcat,使用内置jetty)
  5. java 进制转换 十进制转二,八,十六进制
  6. 链表_有序链表(给数组排序-应用)
  7. ZZULOJ 1056:幸运数字
  8. No module named 'ConfigParser'
  9. Hive中Map数据类型转String类型,其中具体内容不变
  10. fedora16 解码方案
  11. windows10下搭建spark平台
  12. 极化码——比特翻转sc译码(SFSC译码)
  13. LPC1788 Fatfs读写U盘操作
  14. 【计算机基础】五笔字根分解图
  15. chkdsk 停滞_职业停滞–早期发现和治疗
  16. 03_D-H参数表的建立
  17. 老罗直播带货首秀成了么?
  18. zipoutputstream 进行解压缩时winrar提示:不可预料的压缩文件末端
  19. 教大家做蛋黄酥的做法
  20. 成都拓嘉启远:拼多多直通车推广怎么做才能有开好

热门文章

  1. “2012中国年度天使投资人”蔡文胜:彻底拥抱新趋势
  2. 谷歌浏览器emulation仿真手机app浏览器访问
  3. Red Hat 宣布新的红帽认证工程师计划
  4. web app 框架
  5. jdbc mysql api_JDBC常用API和使用
  6. 【运维面试】网络相关的面试题
  7. 动态开题报告论文答辩PPT模板
  8. 二进制方式安装k8s-部署kube-controller-manager
  9. 用户分层在用户运营的运用
  10. Java岗大厂面试百日冲刺【Day43】— Shrio1 (日积月累,每日三题)