假设答案是跳
k
次,某一只多跳
列出方程:
(x+k∗m)−(y+k∗n)=d∗L
整理得
k(m−n)−d∗L=y−x
未知数只有
k,d
,用扩展欧几里得搞定
#include<cstdio>
#include<iostream>
using namespace std;
long long gcd;
void exgcd(long long a, long long b, long long &x, long long &y)
{
if(b==0)
{
x=1;
y=0;
gcd=a;
}
else
{
exgcd(b,a%b,y,x);
y-=a/b*x;
}
}
int main()
{
//freopen("data.in","r",stdin);
long long x,y,m,n,l;
cin>>x>>y>>m>>n>>l;
long long a=(m-n), b=(-l), c=(y-x), X, Y;
exgcd(a,b,X,Y);
if(c%gcd)puts("Impossible");
else
{
a/=gcd;
b/=gcd;
X*=c/gcd;
X%=b;
if(X<0)X+=b;
printf("%lld\n",X);
}
return 0;
}