POJ2891:Strange Way to Express Integers——题解
http://poj.org/problem?id=2891
题目大意:
k个不同的正整数a1,a2,...,ak。对于一些非负m,满足除以每个ai(1≤i≤k)得到余数ri。求出最小的m。
输入和输出中的所有整数都是非负数,可以用64位整数类型表示。
——————————————
首先我们打眼一看可能是孙子定理。
但是我们无法保证a一定互质。
那么显然就要用我们的可爱的exgcd啦!
(下面题解根据这位大佬所懂http://blog.csdn.net/zmh964685331/article/details/50527894)
显然对于x=r(mod a)
我们有:
x+y1a1=r1①
x-y2a2=r2②
x-y3a3=r3③
……
①②相减得:
y1a1+y2a2=r1-r2
我们就有了标准的exgcd的方程了。
不能解就是-1
否则我们能求出其中一个y1,将其化为最小值后,带入①得到
x0=r1-y1a1
这是x的其中一个解,全解为
x=x0+k*lcm(a1,a2)
即
x=x0(mod lcm(a1,a2))
则:
x+y3*lcm(a1,a2)=x0④
③④再联立,重复以上过程即可。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
using namespace std;
typedef long long ll;
inline ll read(){
ll X=,w=; char ch=;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b==){
x=;y=;
return a;
}
ll r=exgcd(b,a%b,x,y);
ll temp;
temp=x;
x=y;
y=temp-(a/b)*y;
return r;
}
ll a[],r[];
int main(){
int k;
while(scanf("%d",&k)!=EOF){
bool ok=;
for(int i=;i<=k;i++){
a[i]=read();
r[i]=read();
}
ll a1=a[],r1=r[];
for(int i=;i<=k;i++){
ll A=a1,B=a[i],C=r1-r[i];
ll x,y;
ll g=exgcd(A,B,x,y);
if(C%g){
printf("-1\n");
ok=;
break;
}
x=C/g*x%a[i];
r1=r1-x*a1;
a1=a1*a[i]/g;
}
if(ok)continue;
printf("%lld\n",(r1%a1+a1)%a1);
}
return ;
}
POJ2891:Strange Way to Express Integers——题解的更多相关文章
- 中国剩余定理+扩展中国剩余定理 讲解+例题(HDU1370 Biorhythms + POJ2891 Strange Way to Express Integers)
0.引子 每一个讲中国剩余定理的人,都会从孙子的一道例题讲起 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 1.中国剩余定理 引子里的例题实际上是求一个最小的x满足 关键是,其中 ...
- POJ2891——Strange Way to Express Integers(模线性方程组)
Strange Way to Express Integers DescriptionElina is reading a book written by Rujia Liu, which intro ...
- POJ2891 Strange Way to Express Integers
题意 Language:Default Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total S ...
- POJ2891 Strange Way to Express Integers 扩展欧几里德 中国剩余定理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ2891 题意概括 给出k个同余方程组:x mod ai = ri.求x的最小正值.如果不存在这样的x, ...
- POJ2891 - Strange Way to Express Integers(模线性方程组)
题目大意 求最小整数x,满足x≡a[i](mod m[i])(没有保证所有m[i]两两互质) 题解 中国剩余定理显然不行....只能用方程组两两合并的方法求出最终的解,刘汝佳黑书P230有讲~~具体证 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- POJ2891 Strange Way to Express Integers [中国剩余定理]
不互质情况的模板题 注意多组数据不要一发现不合法就退出 #include <iostream> #include <cstdio> #include <cstring&g ...
- POJ2891 Strange Way to Express Integers【扩展中国剩余定理】
题目大意 就是模板...没啥好说的 思路 因为模数不互质,所以直接中国剩余定理肯定是不对的 然后就考虑怎么合并两个同余方程 \(ans = a_1 + x_1 * m_1 = a_2 + x_2 * ...
- [poj2891]Strange Way to Express Integers(扩展中国剩余定理)
题意:求解一般模线性同余方程组 解题关键:扩展中国剩余定理求解.两两求解. $\left\{ {\begin{array}{*{20}{l}}{x = {r_1}\,\bmod \,{m_1}}\\{ ...
随机推荐
- hdu1069Monkey and Banana(动态规划)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Maxscript-获取选中文件
Maxscript - 获取选中文件 使用 .Net 的方法弹出窗口选择文件,并范围所有选中文件的路径“” Fn Fun_GetFilePaths strTitle strFilter = ( dia ...
- VMware实现控制台功能(VMware Remote Console)
说明: 刚开始一脸懵逼,google了一些资料,发现基本没有能快速落地的,自己做完后梳理了一下发上来供大家参考. 如果帮到你了,请点赞评论关注,以资鼓励,多谢~ 实现VMware控制台功能主要有两种方 ...
- Django常用命令总结
安装Django: pip install django 指定版本 pip3 install django==2.0 新建项目: django-admin.py startprject mysite ...
- 【WXS全局对象】Global
Global对象的方法调用时,无需使用 Global.parseInt(...),而是直接使用 parseInt(...) 方法: 名称 说明 parseInt(string, radix) 解析一个 ...
- MyBatis 注解配置及动态SQL
一.注解配置 目前MyBatis支持注解配置,用注解方式来替代映射文件,但是注解配置还是有点不完善,在开发中使用比较少,大部分的企业还是在用映射文件来进行配置.不完善的地方体现在于当数据表中的字段 ...
- vuejs学习之 项目打包之后的首屏加载优化
vuejs学习之 项目打包之后的首屏加载优化 一:使用CDN资源 我们在打包时,会将package.json里,dependencies对象里插件打包起来,我们可以将其中的一些使用cdn的方式加载,例 ...
- mysql 只返回一条数据
问题描述: 需要得到时间最近的一条记录,但是按照时间字段排完序之后,得到的是全部. 解决办法: order by createtime desc //降序:asc:升序 LIMIT 1
- c#非界面线程控制控件
private delegate void FlushCilent(); Invoke(new FlushCilent(databaseConnect));
- 开启假期JAVA之路
. 从最基础的JAVA开始学起,已经上了三节课啦!希望在课程结束后能完成一个令自己满意的连连看项目,期待ing~ 慢慢的从简单的代码上手了~ . 用循环输出等腰三角形的效果 import java.u ...