题目
规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。求它们跳了几次以后才会碰面。
分析
简单的,得到
移项后
然后mod l改为
再移项
很像了,各取相反数。
设A为n-m,B为x-y
那么
扩欧
求出A和z后还要求最小的,所以要除以最大公约数,
then
代码
#include <cstdio>
using namespace std;
typedef long long ll;
ll d,x,y,m,n,l,a,b,X,Y;
void exgcd(ll a,ll b,ll &X,ll &Y){
if (!b) X=1,Y=0,d=a;
else exgcd(b,a%b,Y,X),Y-=a/b*X;
}
int main(){
scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
a=n-m; b=x-y;
if (a<0) a=-a,b=-b;//非负整数
exgcd(a,l,X,Y);//扩欧
if (b%d) puts("Impossible");//不可能
else{
int k=l/d;//除以最大公约数
printf("%lld",((X*b/d)%k+k)%k);//求出答案
}
return 0;
}