POJ 2891 Strange Way to Express Integers (解一元线性方程组)
求解一元线性同余方程组:
x=ri(mod ai) i=1,2,...,k
解一元线性同余方程组的一般步骤:
先求出前两个的解,即:
x=r1(mod a1) 1
x=r2(mod a2) 2
1式等价于x=r1+a1*m,2式等价于x=r2+a2*n
联立可得:m*a1-n*a2=r2-r1=c
若方程有解,则必须(a1,a2)|c
设d=(a1,a2),那么如果有解,即可求得
m*a1-n*a2=d的解,m=m'
则 m*a1-n*a2=c的解,m0=m'*c/d
通解m*=m0+(a2/d)*i
令s=a2/d,则可以求得m的最小解
m=(m0%s+s)%s
带入x=r1+a1*m,即可求出解x,设为x0
接下来,由
x=r1(mod a1) 1
x=r2(mod a2) 2
得出x=x0=r1(mod a1),x=x0=r2(mod a2)
由定理可得,x=x0(mod [a1,a2])
设a=lcm(a1,a2),即可将1式和2式合并成一项。
接下来的就重复上面步骤即可。
#include <iostream>
#include <stdio.h> using namespace std;
int k;
//求解方程ax+by=gcd(a,b)
long long exgcd(long long a,long long b,long long &x,long long &y){
if(b==){
x=;
y=;
return a;
}
long long g=exgcd(b,a%b,x,y);
long long tmp=x;
x=y;
y=tmp-(a/b)*y;
return g;
}
int main()
{
long long a1,a2,r1,r2,d,c;
long long x,y,x0;
long long s; //s=a2/d;
while(scanf("%d",&k)!=EOF){
bool flag=true;
scanf("%I64d%I64d",&a1,&r1);
for(int i=;i<k;i++){
scanf("%I64d%I64d",&a2,&r2);
if(!flag)
continue;
/*
解x=r1(mod a1)
x=r2(mod a2)
相当于
解不定方程:x*a1+y*a2=r2-r1
先求解方程:x*a1+y*a2=r2-r1=gcd(a1,a2)
得出解x,则方程x*a1+y*a2=r2-r1的解x0=x*(r2-r1)/gcd(a1,a2)=x*c/d
令s=a2/d,那么
x0的最小解为:x0=(x0%s+s)%s
即可得出解x=r1+x0*a1
然后将x赋值给r1,lcm(a1,a2)赋值给a1,继续求解。
*/
c=r2-r1;
d=exgcd(a1,a2,x,y);
if(c%d!=){
flag=false;
continue;
}
x0=x*c/d;
s=a2/d;
x0=(x0%s+s)%s;
r1=r1+x0*a1;
a1=a1*a2/d;
}
if(flag)
printf("%I64d\n",r1);
else
printf("-1\n");
}
return ;
}
POJ 2891 Strange Way to Express Integers (解一元线性方程组)的更多相关文章
- poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9472 ...
- poj——2891 Strange Way to Express Integers
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 16839 ...
- [POJ 2891] Strange Way to Express Integers
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 10907 ...
- POJ 2891 Strange Way to Express Integers(拓展欧几里得)
Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ...
- POJ 2891 Strange Way to Express Integers | exGcd解同余方程组
题面就是让你解同余方程组(模数不互质) 题解: 先考虑一下两个方程 x=r1 mod(m1) x=r2 mod (m2) 去掉mod x=r1+m1y1 ......1 x=r2+m2y2 . ...
- poj 2891 Strange Way to Express Integers(中国剩余定理)
http://poj.org/problem?id=2891 题意:求解一个数x使得 x%8 = 7,x%11 = 9; 若x存在,输出最小整数解.否则输出-1: ps: 思路:这不是简单的中国剩余定 ...
- POJ 2891 Strange Way to Express Integers 中国剩余定理MOD不互质数字方法
http://poj.org/problem?id=2891 711323 97935537 475421538 1090116118 2032082 120922929 951016541 1589 ...
- POJ 2891 Strange Way to Express Integers 中国剩余定理 数论 exgcd
http://poj.org/problem?id=2891 题意就是孙子算经里那个定理的基础描述不过换了数字和约束条件的个数…… https://blog.csdn.net/HownoneHe/ar ...
- [poj 2891] Strange Way to Express Integers 解题报告(excrt扩展中国剩余定理)
题目链接:http://poj.org/problem?id=2891 题目大意: 求解同余方程组,不保证模数互质 题解: 扩展中国剩余定理板子题 #include<algorithm> ...
随机推荐
- 从0 开始 WPF MVVM 企业级框架实现与说明 ---- 第三讲 WPF中 DataTemplate
后面在我们这项目中会大量用到模板,主要指的是空间模板,数据模板会用得比较少,下面我想介绍下控件模板和数据模板,我看到有位大神写得比较不错,我整理了下,让大家能更好理解,供大家参考, 首先介绍 Data ...
- Android体系结构
由图可知,android被分成4个层次,以linux为核心,针对手机进行专门的优化,提供了android操作系统最基本的功能,在此之上又分为android runtime和libraries.其中Da ...
- 自己的php函数库
//判断数组中是否有元素为空的函数,支持多维数组,相似系统函数in_array(value,array,type) function is_null_array($arr) { if(!is_arra ...
- Fragment+RadioButton实现点击切换页面效果
首先我们需要在主布局文件中 放一个 容器,方便让fragment加入进去,我们创建了四个Fragment,并用RedioButton实现了导航栏 MainActivity.java package c ...
- c++ _beginthread
c++多线程编程 #include <windows.h> #include <process.h> /* _beginthread, _endthread */ #inclu ...
- Daily Scrum2
今天我们小组开会内容分为以下部分: part 1: 之前的失败教训: part 2: 针对Anti-spam and anti-abuse module模块的任务分工: part 3: 之后小组成员必 ...
- 3527: [Zjoi2014]力 - BZOJ
题目大意:给出n个数qi,定义 Fj为 令 Ei=Fi/qi,求Ei. 看了很久题解,终于有些眉目,因为知道要用FFT,所以思路就很直了 其实我们就是要±1/(j-i)^2 ( j-i大 ...
- 【BZOJ】【1010】【HNOI2008】玩具装箱Toy
DP/斜率优化 根据题目描述很容易列出动规方程:$$ f[i]=min\{ f[j]+(s[i]-s[j]+i-j-1-L)^2 \}$$ 其中 $$s[i]=\sum_{k=1}^{i} c[k] ...
- 【BZOJ】【1717】【USACO 2006 Dec】Milk Patterns产奶的模式
后缀数组 o(︶︿︶)o 唉傻逼了一下,忘了把后缀数组的字典范围改回20001,直接21交了上去,白白RE了两发……sigh 既然要找出现了K次的子串嘛,那当然要用后缀数组了>_>(因为我 ...
- matrix_last_acm_1
password 123 A http://acm.hust.edu.cn/vjudge/contest/view.action?cid=96950#problem/A 题意:n个数初始ai,m次操作 ...