POJ1061(线性同余方程)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 105587 | Accepted: 20789 |
Description
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。
Input
Output
Sample Input
1 2 3 4 5
Sample Output
4
扩展欧几里得求不定方程:ax+by=gcd(a,b)的解.不定方程 ax+by=c。若gcd(a,b)不能整除c,那么不定方程无解。
代码一:
#include <cstdio>
using namespace std;
typedef long long LL;
LL extgcd(LL a,LL b,LL &x,LL &y)
{
LL d=a;
if(b!=)
{
d=extgcd(b,a%b,y,x);
y-=(a/b*x);
}
else
{
x=;y=;
}
return d;
}
LL s1,s2,v1,v2,l;
int main()
{
while(scanf("%lld%lld%lld%lld%lld",&s1,&s2,&v1,&v2,&l)!=EOF)
{
LL a,b,c,x,y;
a=v1-v2;
b=l;
c=s2-s1;
if(a<) a+=l;
LL gcd=extgcd(a,b,x,y);
if(c%gcd!=)
{
printf("Impossible\n");
}
else
{
LL mod=b/gcd;
x=(x*(c/gcd))%mod;//注意扩大 c/gcd 倍
while(x<) x+=mod;
printf("%lld\n",x);
}
}
return ;
}
代码二:
#include <iostream>
using namespace std;
typedef __int64 LL;//int前双'_'
LL extgcd(LL a,LL b,LL &x,LL &y)
{
LL d=a;
if(b!=)
{
d=extgcd(b,a%b,y,x);
y-=(a/b*x);
}
else
{
x=;y=;
}
return d;
}
LL gcd(LL a,LL b)
{
if(b==) return a;
else return gcd(b,a%b);
}
LL s1,s2,v1,v2,m;
int main()
{
while(cin>>s1>>s2>>v1>>v2>>m)
{
//两者相遇的条件 s1+v1*t=s2+v2*t-k*m => (v1-v2)*t+m*k=s2-s1
//得线性同余方程 ax+by=c (a:v1-v2,x:t,b:m,k:y,c:s1-s1)
LL a=v1-v2;
if(a<) a+=m;
LL b=m;
LL c=s2-s1;
if(c<) c+=m;
LL div=gcd(a,b);
if(c%div!=) //同余方程ax+by=c.有解的充要条件是 c|gcd(a,b).
{
cout<<"Impossible"<<endl;
continue;
}
a/=div;//将各个系数均缩小div倍
b/=div;//ax+by=c => a'x+b'y=c'
c/=div;
LL x=,y=;
extgcd(a,b,x,y);//求解线性同余方程 ax+by=1
x=(x*c)%b;//扩展欧几里得求的是ax+by=1中的x,结果需要将x扩大c倍
while(x<) x+=b;
cout<<x<<endl;
}
return ;
}
java版
import java.util.Scanner;
import static java.lang.System.out;
public class Main{
static Scanner in = new Scanner(System.in);
static long s1,s2,v1,v2,l;
static class LL{
private long value;
public LL(long value)
{
this.value=value;
}
public long getValue()
{
return this.value;
}
public void setValue(long value)
{
this.value=value;
}
}
static long extgcd(long a,long b,LL x,LL y)
{
long d=a;
if(b!=0)
{
d=extgcd(b,a%b,y,x);
long buf = y.getValue();
buf-=(a/b*x.getValue());
y.setValue(buf);
}
else
{
x.setValue(1);y.setValue(0);;
}
return d;
}
public static void main(String args[]){ while(in.hasNext())
{
s1=in.nextLong();
s2=in.nextLong();
v1=in.nextLong();
v2=in.nextLong();
l=in.nextLong();
long a=v1-v2,b=l,c=s2-s1;
if(a<0) a+=l;
LL x = new LL(0),y = new LL(0);
long div=extgcd(a,b,x,y);
if(c%div!=0)
{
out.println("Impossible");
continue;
}
long mod=b/div;
long res=x.getValue();
res=(res*(c/div))%mod;//最小正整数解
while(res<0)
res+=mod;
out.println(res);
}
}
}
POJ1061(线性同余方程)的更多相关文章
- POJ1061 青蛙的约会(线性同余方程)
线性同余方程$ ax \equiv b \pmod n$可以用扩展欧几里得算法求解. 这一题假设青蛙们跳t次后相遇,则可列方程: $$ Mt+X \equiv Nt+Y \pmod L$$ $$ (M ...
- 数论 - n元线性同余方程的解法
note:n元线性同余方程因其编程的特殊性,一般在acm中用的很少,这里只是出于兴趣学了一下 n元线性同余方程的概念: 形如:(a1*x1+a2*x2+....+an*xn)%m=b%m ...
- POJ2115 C Looooops(线性同余方程)
无符号k位数溢出就相当于mod 2k,然后设循环x次A等于B,就可以列出方程: $$ Cx+A \equiv B \pmod {2^k} $$ $$ Cx \equiv B-A \pmod {2^k} ...
- POJ 2115 C Looooops (扩展欧几里德 + 线性同余方程)
分析:这个题主要考察的是对线性同余方程的理解,根据题目中给出的a,b,c,d,不难的出这样的式子,(a+k*c) % (1<<d) = b; 题目要求我们在有解的情况下求出最小的解,我们转 ...
- poj2115-C Looooops -线性同余方程
线性同余方程的模板题.和青蛙的约会一样. #include <cstdio> #include <cstring> #define LL long long using nam ...
- 扩展欧几里得,解线性同余方程 逆元 poj1845
定理:对于任意整数a,b存在一堆整数x,y,满足ax+by=gcd(a,b) int exgcd(int a,int b,int &x,int &y){ ){x=,y=;return ...
- POJ 1061 - 青蛙的约会 - [exgcd求解一元线性同余方程]
先上干货: 定理1: 如果d = gcd(a,b),则必能找到正的或负的整数k和l,使ax + by = d. (参考exgcd:http://www.cnblogs.com/dilthey/p/68 ...
- HDU3579:Hello Kiki(解一元线性同余方程组)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3579 题目解析:求一元线性同余方程组的最小解X,需要注意的是如果X等于0,需要加上方程组通解的整数区间lc ...
- HDU1573:X问题(解一元线性同余方程组)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1573 题目解析;HDU就是坑,就是因为n,m定义成了__int64就WAY,改成int就A了,无语. 这题 ...
随机推荐
- ResourceLoader笔记
Ant路径匹配 Ant路径通配符支持“?”.“*”.“**”,注意通配符匹配不包括目录分隔符“/”: “?”:匹配一个字符,如“config?.xml”将匹配“config1.xml”: “*”:匹配 ...
- 吴恩达深度学习笔记(五) —— 优化算法:Mini-Batch GD、Momentum、RMSprop、Adam、学习率衰减
主要内容: 一.Mini-Batch Gradient descent 二.Momentum 四.RMSprop 五.Adam 六.优化算法性能比较 七.学习率衰减 一.Mini-Batch Grad ...
- shell脚本:批量修改文件名
参考链接1:shell脚本:批量修改文件名(删除文件名中字符) 参考链接2:linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 ) 参考链接3:每天一个linux ...
- 【BZOJ1854】游戏[SCOI2009](神奇贪心+并查集)
这道题和今年GDKOI的Day2T2很像(然而gdkoi的题用网络流可以A,这道题只能拿30). 网址:http://www.lydsy.com/JudgeOnline/problem.php?id= ...
- Python-flask中数据库连接池DBUtils
一.DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 连接池的三种模式: 第一种模式: 它的缺点:每一次请求反复创建数据库的链接,链接的次数太多 ...
- IDEA运行debug为灰色无法运行
这种情况一般在使用他人项目的时候产生. 检查几个问题,本地环境是否配置好 然后进入项目的入口右键运行是否可以正常运行 如果不可以,就在 修改一下src文件 一般就可以正常使用了
- pandas的Series
pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False) 首先介绍一下基本的: d ...
- http://www.cnblogs.com/jscode/archive/2012/09/03/2669299.html
http://www.cnblogs.com/jscode/archive/2012/09/03/2669299.html
- Jquery Ajax模版
$.ajax({ type: "GET", url: "test.json", data: {username:'tt', content:'tt'}, dat ...
- phalcon:整合官方多模块功能,方便多表查询
phalcon:整合官方多模块功能,方便多表查询 项目分为: namespace Multiple\Backend; namespace Multiple\Frontend; 目录结构如下: publ ...