exgcd裸题。
两个人之间有一个距离,两人有一个速度差,设这个距离为c,速度差为a。而需要的次数就是x
那么题意就是,这样就是exgcd的标准形式啦。
至于距离和速度差一定要记得是追及问题,如果距离为a-b,那么速度就是b的减a的,如果为负,就取模加模再取模,变为正的
含义上就是追了一圈。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define mode 999911658
using namespace std;
typedef long long ll;
ll x,y,xx,yy,n,m,l;
ll exgcd(ll a,ll b)
{
if(b==0)
{
x=1,y=0;
return a;
}
ll r=exgcd(b,a%b);
ll t=x;
x=y;
y=t-a/b*x;
return r;
}
int main()
{
scanf("%lld%lld%lld%lld%lld",&xx,&yy,&m,&n,&l);
ll aa=((n-m)%l+l)%l,cc=((xx-yy)%l+l)%l; //追及问题。。
ll gg=exgcd(aa,l);
if(cc%gg)
{
printf("Impossible");
return 0;
}
cc/=gg;l/=gg;
x=(x%l+l)%l;
x=x*cc%l;
printf("%lld",(x%l+l)%l);
return 0;
}