POJ 2891 Strange Way to Express Integers excrt/我真傻,真的
我真傻,真的
我单知道这道题在(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/我真傻,真的的更多相关文章
- 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 解题报告(excrt扩展中国剩余定理)
题目链接:http://poj.org/problem?id=2891 题目大意: 求解同余方程组,不保证模数互质 题解: 扩展中国剩余定理板子题 #include<algorithm> ...
- 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 中国剩余定理 数论 exgcd
http://poj.org/problem?id=2891 题意就是孙子算经里那个定理的基础描述不过换了数字和约束条件的个数…… https://blog.csdn.net/HownoneHe/ar ...
- 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【扩展欧几里德】【模线性方程组】
求解方程组 X%m1=r1 X%m2=r2 .... X%mn=rn 首先看下两个式子的情况 X%m1=r1 X%m2=r2 联立可得 m1*x+m2*y=r2-r1 用ex_gcd求得一个特解x' ...
随机推荐
- 命令行启动nodejs方式 小总结
之前启动nodejs都是写一个命令行文件,如nodejs.cmd,内容为:start node E:\node\app.js. 今天突然想到之前也用过另外一种方式启动,就是在命令行通过cd命令先找到n ...
- java内存模型(netty权威指南)
1.Java内存模型 Java虚拟机规范中试图定义一种java内存模型(java Memory Model,jmm)来屏蔽掉各种操作系统.虚拟机实现厂商和硬件的内存访问差异,以确保Java程序在所有操 ...
- net.sf.json-lib maven依赖问题.
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</art ...
- [转]VS 2013 未找到与约束contractname Microsoft.VisualStudio.Utilities.IContentTypeRegistryService...匹配的导出
前几天,将Visual studio 2013 update 3 升级到了update 5.打开原来的解决方案,出现了 未找到与约束 contractname Microsoft.VisualStud ...
- LoadRunner 服务器(Linux、Windows) 性能指标度量说明
服务器资源性能计数器 下表描述了可用的计数器: 监控器 度量 说明 CPU 监控器 Utilization 监测 CPU 利用率. 磁盘空间监控器 Disk space 监测可用空间 (MB) 和已用 ...
- #410div2C. Mike and gcd problem
C. Mike and gcd problem time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- MySql集合查询
SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作. 集合操作主要包括并操作UNION.交操作INTERSECT.差操作EXCEPT. 注意,参加集合操作的各查询结果 ...
- win7 eclipse连接hadoop2.x开发环境搭建
环境: hadoop-2.3.0-cdh5.1.0 centos 6.5 x64 win7 eclipse4.3 0. 前提条件 ,jdk,maven要安装好. 1.下载hadoop,用winRAR解 ...
- Entity Framework Code-First(9.7):DataAnnotations - Table Attribute
DataAnnotations - Table Attribute: Table attribute can be applied to a class. Default Code-First con ...
- 8.使用hydra对端口进行爆破
如果对开启端口的服务不清楚,请看我之前写的文章:https://www.cnblogs.com/bmjoker/p/8833316.html 2018,网站的防护(sql,xss...)的安全保护也已 ...