我真傻,真的

我单知道这道题在(b-b1)%d!=0时要判无解,哪成想自己却没有读完这组后面的数据而直接break掉。。。qwqfk


$ x \equiv b_1 (  mod    a_1  ) $

$ x \equiv b_2   ( mod  a_2 )  $

....

$x  \equiv b_n (mod a_n)$

$a_1,a_2,...,a_n$

不互质时,正常的中国剩余定理是用不了的

所以有了EX版

求解:

我们先看第1,2个方程,它们可以转化为:

x=a1*k1+b1, (I)

x=a2*k2+b2;

进而a1*k1+b1=a2*k2+b2,所以有:

a1*k1-a2*k2=b2-b1

进一步就是 a1*k1+a2*(-k2)=b2-b1  (II)

把他转化为exgcd求解的形式:ax+by=c,a就是a1,x就是k1,b就是a1,y就是-k2,c就是b2-b1;

此时可以求出(I)的一组特解,即a1*k1+a2*(-k2)=gcd(a1,a2)时,k1的值。

显然,当(b2-b1)不能被gcd(a1,a2)整除时,(1)无解;

若有解,(I)的解就是 k1*(b2-b1)/gcd(a1,a2),

注意此时算出来k1要mod (a2/gcd(a1,a2)),这相当于是给k1减去了floor(k1/(a2/gcd(a1,a2)))*(a2/gcd(a1,a2)),给k2加上了floor(k1/(a2/gcd(a1,a2)))*(a1/gcd(a1,a2)),防止爆long long;

然后将k1带回原式,则x=a1*k1+b1

此时,你得到了满足第1,2两个方程的解,

那么我们显然又有一个结论:

最终的ans ≡ x (mod lcm(a1,a2))

所以我们又有了:
x≡b12 (mod a12) (*)

其中b12=第1,2两个方程的解,即上一行的x;a12=lcm(a1,a2)

那么我们就可以拿(*)和条件中的第3个方程去重复上面的操作。

一直重复下去,直到解出最终的解

注:代码中的a相当于a1,a1相当与a2

#include<cstdio>
#include<iostream>
#define ll long long
#define R register ll
using namespace std;
inline ll g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
inline ll exgcd(ll a,ll b,ll& x,ll& y) {
if(b==) {x=,y=; return a;}
R d=exgcd(b,a%b,y,x); y-=(a/b)*x; return d;
}
int n;
signed main() {
while(~scanf("%d",&n)) { register bool flg=false;
R a=g(),b=g(),k,k1;
for(R i=;i<=n;++i) {
R a1=g(),b1=g(); if(flg) continue;
R d=exgcd(a,a1,k,k1);
if((b1-b)%d) flg=true;
else {
k=(b1-b)/d*k%a1;
b+=a*k;
a=a*a1/d;
b%=a;
}
} if(flg) printf("-1\n");
else printf("%lld\n",(b%a+a)%a);
}
}

2019.05.15纪念自己的沙雕石刻qwq

POJ 2891 Strange Way to Express Integers excrt/我真傻,真的的更多相关文章

  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 解题报告(excrt扩展中国剩余定理)

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

  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 中国剩余定理 数论 exgcd

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

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

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

  9. POJ 2891 Strange Way to Express Integers【扩展欧几里德】【模线性方程组】

    求解方程组 X%m1=r1 X%m2=r2 .... X%mn=rn 首先看下两个式子的情况 X%m1=r1 X%m2=r2 联立可得 m1*x+m2*y=r2-r1 用ex_gcd求得一个特解x' ...

随机推荐

  1. Agc011_C Squared Graph

    传送门 题目大意 给定$n$个点$m$条边的简单图(无重边无自环),将有序点对$\{a,b\}$作为新的点,新产生的$n^2$个点中对于两个点,$\{a,b\},\{x,y\}$,当且仅当原图中存在边 ...

  2. ACM学习历程—BNUOJ3685 Building for UN(构造)

    The United Nations has decided to build a new headquarters in Saint Petersburg, Russia. It will have ...

  3. BestCoder Round #92 比赛记录

    上午考完试后看到了晚上的BestCoder比赛,全机房都来参加 感觉压力好大啊QAQ,要被虐了. 7:00 比赛开始了,迅速点进了T1 大呼这好水啊!告诉了同桌怎么看中文题面 然后就开始码码码,4分1 ...

  4. 【QT】对Qt项目开发中遇到的问题的总结

    1. QMessageBox中文乱码 这里的中文乱码是指只有QMessageBox才出现中文乱码,其他都可以正常使用的情况.有些博客中提到使用QString::fromUtf8()函数, 实测有些情况 ...

  5. 让网站变灰的CSS代码(支持IE、FIREFOX和CHROME)(转)

    方法1:支持IE <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xht ...

  6. 使用NSURLProtocol和NSURLSession拦截UIWebView的HTTP请求(包括ajax请求)

    问题:服务器端有一个网站需要AD认证,整站都开了Basic认证,包括图片,CSS等资源,我在HTTP请求头里面添加认证所需的用户名和密码,传递到服务器端可以认证通过.我在UIWebView的shoul ...

  7. C#添加修改控件css样式

    一.添加属性 MyStyleSheet.Attributes.Add("href","/css/flostyle.css") 二.改变css样式 if (use ...

  8. bzoj2118

    最短路 很早以前做的了 数据范围太大,不能直接算 mn=min(a[i]) 算出d[i]表示sum%mn=i最小能构成的数,这个用最短路就行了,然后计算d[i],d[i]+mn的个数统计答案 #inc ...

  9. hibernate 持久化对象的生命周期

    持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象 ...

  10. 性能分析工具 DotTrance

    1 本例子采用dotTrace 5.3 版本 运行dotTrace 5.3 .exe 选择独立应用程序 Standalone    Application 选择需要测试的应用程序exe的路径 点击啊开 ...