求解一元线性同余方程组:

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 (解一元线性方程组)的更多相关文章

  1. poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9472   ...

  2. poj——2891 Strange Way to Express Integers

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 16839 ...

  3. [POJ 2891] Strange Way to Express Integers

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 10907 ...

  4. POJ 2891 Strange Way to Express Integers(拓展欧几里得)

    Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ...

  5. POJ 2891 Strange Way to Express Integers | exGcd解同余方程组

    题面就是让你解同余方程组(模数不互质) 题解: 先考虑一下两个方程 x=r1 mod(m1) x=r2 mod (m2) 去掉mod x=r1+m1y1   ......1 x=r2+m2y2   . ...

  6. poj 2891 Strange Way to Express Integers(中国剩余定理)

    http://poj.org/problem?id=2891 题意:求解一个数x使得 x%8 = 7,x%11 = 9; 若x存在,输出最小整数解.否则输出-1: ps: 思路:这不是简单的中国剩余定 ...

  7. POJ 2891 Strange Way to Express Integers 中国剩余定理MOD不互质数字方法

    http://poj.org/problem?id=2891 711323 97935537 475421538 1090116118 2032082 120922929 951016541 1589 ...

  8. POJ 2891 Strange Way to Express Integers 中国剩余定理 数论 exgcd

    http://poj.org/problem?id=2891 题意就是孙子算经里那个定理的基础描述不过换了数字和约束条件的个数…… https://blog.csdn.net/HownoneHe/ar ...

  9. [poj 2891] Strange Way to Express Integers 解题报告(excrt扩展中国剩余定理)

    题目链接:http://poj.org/problem?id=2891 题目大意: 求解同余方程组,不保证模数互质 题解: 扩展中国剩余定理板子题 #include<algorithm> ...

随机推荐

  1. [C#] 记-TinyMapper使用

    What is TinyMapper TinyMapper - a tiny and quick object mapper for .Net. The main advantage is perfo ...

  2. CDN技术原理

    要了解CDN的实现原理,首先让我们来回顾一下网站传统的访问过程,以便理解其与CDN访问方式之间的差别: 由上图可见,传统的网站访问过程为: 1. 用户在浏览器中输入要访问的域名: 2. 浏览器向域名解 ...

  3. C#.Net 图片处理大全

    C# How to: Image filtering by directly manipulating Pixel ARGB values C# How to: Image filtering imp ...

  4. 混合使用C和C++

    C++作为C语言的扩展集,几乎所有的C程序都可以在C++中编译和运行,但是要注意C程序中可能使用了C++中的关键字作为变量,比如在C中:int class = 0; 但这在C++中不行.出于方便性,我 ...

  5. asp.net web.config 经典模式和集成模式相关配置

    <?xml version="1.0"?> <configuration> <!--IIS经典模式下使用--> <system.web&g ...

  6. java数据结构和算法------快速排序

    package iYou.neugle.sort; public class Quick_sort { public static void QuickSort(double[] array, int ...

  7. SQL SERVER定时任务执行跟踪--供远程查看 [原创]

    一.背景 每次查需要优化的SQL都需要上外网,通过Profiler,报表或者DMV执行特定sql来查找,来回跑很麻烦,能不能在本地直接监控外网的好性能的SQL呢?方法是有的,我们可以通过把Profil ...

  8. mysql几个命令

    1.格式化输出 select * from mysql.user\G 2.显示版本 show version() 3.显示引擎 show engines mysql> show engines; ...

  9. ASP.Net MVC中数据库数据导出Excel,供HTTP下载(转)

    转自http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于web ...

  10. android 开发 讯飞语音唤醒功能

    场景:进入程序后处于语音唤醒状态,当说到某个关键词的时候打开某个子界面(如:语音识别界面) 技术要点: 1. // 设置唤醒一直保持,直到调用stopListening,传入0则完成一次唤醒后,会话立 ...