由题意x+m*t-y-n*t=p*l;t代表时间,p代表圈数,这两个量是未知数。
整理得:p*l+(n-m)*t=x-y;
令a=n-m;b=l,c=x-y;
即a*x+b*y=c;
先解a*x1+b*y1=gcd(a,b);
等式两边同时乘以c/gcd(a,b);
x=x1*c/gcd(a,b);
t=b/gcd(a,b);
x=(x%t+t)%t;
#include<bits/stdc++.h>
using namespace std;
int exgcd(int a,int b,int &x,int &y)
{
int ret,tmp;
if(!b)
{
x=1;y=0;
return a;
}
ret=exgcd(b,a%b,x,y);
tmp=x;
x=y;
y=tmp-(a/b)*y;
return ret;
}
int main()
{
int x,y,m,n,l,X,Y,t,z;
scanf("%d %d %d %d %d",&x,&y,&m,&n,&l);
long long a=n-m,c=x-y;
if(a<0)
{
a=-a;
c=-c;
}//处理负数
z=exgcd(a,l,X,Y);
if(c%z!=0)//有整数解的充要条件
{
cout<<"Impossible"<<endl;
return 0;
}
else
{
t=l/z;
cout<<(((long long)c/z*X)%t+t)%t<<endl;
}
return 0;
}