pog 2891 Strange Way to Express Integers (中国剩余定理 非互质)
来源:互联网 发布:机器人仿真软件 编辑:程序博客网 时间:2024/06/04 19:48
Description
Choose k different positive integers a1, a2, …, ak. For some non-negative m, divide it by every ai (1 ≤ i ≤ k) to find the remainder ri. If a1, a2, …, ak are properly chosen, m can be determined, then the pairs (ai, ri) can be used to express m.
“It is easy to calculate the pairs from m, ” said Elina. “But how can I find m from the pairs?”
Since Elina is new to programming, this problem is too difficult for her. Can you help her?
Input
The input contains multiple test cases. Each test cases consists of some lines.
- Line 1: Contains the integer k.
- Lines 2 ~ k + 1: Each contains a pair of integers ai, ri (1 ≤ i ≤ k).
Output
Output the non-negative integer m on a separate line for each test case. If there are multiple possible values, output the smallest one. If there are no possible values, output -1.
Sample Input
28 711 9
Sample Output
31
题解:题意就是线性方程组的解 x;
x = r1 (mod a1);
x = r2 (mod a2);
……
x = rn (mod an).
a1,a2……an,不两两互质的情况
两两合并求解
自己不能直接写下来,只能记模板,使用逆元还是有点不理解!
代码:
#include<cstdio>#define LL __int64LL gcd(LL a,LL b){ if(b==0) return a; return gcd(b,a%b);}LL exgcd(LL a,LL b,LL &x,LL &y){ if(b==0) { x=1; y=0; return a; } LL d,temp; d=exgcd(b,a%b,x,y); temp=x; x=y; y=temp-a/b*y; return d;}int main(){ LL k,a1,a2,r1,r2,c,d,x,y; while(~scanf("%I64d",&k)) { int flag=0; scanf("%I64d%I64d",&a1,&r1); for(int i=0;i<k-1;i++) { scanf("%I64d%I64d",&a2,&r2); if(flag) continue; c=r2-r1; d=exgcd(a1,a2,x,y); if(c%d) { flag=1; } else { LL q=a2/d; x=(x*c/d%q+q)%q;//x的解可能是负数, r1=a1*x+r1; a1=a1*a2/d;//a1,a2的最小公倍数 } } if(flag) printf("-1\n"); else printf("%I64d\n",r1); } return 0;}
- pog 2891 Strange Way to Express Integers (中国剩余定理 非互质)
- poj 2891 Strange Way to Express Integers 中国剩余定理
- 中国剩余定理 poj 2891 Strange Way to Express Integers
- POJ 2891 Strange Way to Express Integers 中国剩余定理
- poj Strange Way to Express Integers 2891 (中国剩余定理)
- POJ 2891-Strange Way to Express Integers【中国剩余定理】
- POJ 2891 Strange Way to Express Integers (中国剩余定理)
- POJ 2891 Strange Way to Express Integers(中国剩余定理)
- poj 2891 Strange Way to Express Integers(中国剩余定理)
- POJ 2891 Strange Way to Express Integers 非互质的中国剩余定理
- PKU 2891:Strange Way to Express Integers(中国剩余定理非互质)
- POJ 2891 Strange Way to Express Integers【模线性方程组】(中国剩余定理非互质套用)
- POJ 2891 Strange Way to Express Integers(非互质中国剩余定理)
- Strange Way to Express Integers-----不互质的中国剩余定理
- Strange Way to Express Integers(中国剩余定理+不互质)
- poj2891 Strange Way to Express Integers(中国剩余定理)
- POJ-2981 Strange Way to Express Integers(中国剩余定理)
- poj2891 Strange Way to Express Integers(中国剩余定理)
- 异常信息接收器CrashWoodpecker
- 《软技能 代码之外的生存指南》读后感
- 对话框使用ocx控件封装为dll
- c语言之左右法则
- Mybatis手写分页,非常灵活
- pog 2891 Strange Way to Express Integers (中国剩余定理 非互质)
- 【爬坑之路】--Native method not found...【android studio上】
- CF 738D 贪心
- poj 1733 Parity game 离散化+带权并查集(区间)
- hive 数据倾斜总结
- 正则表达式学习
- 5、RxJava学习记录
- redis乐观锁(适用于秒杀系统)
- Javascript的内存管理