扩展欧几里得
我好菜啊恶补一波
列出方程(t*n+x)-(t*m+y)=kL <=> (n-m)*t-kL=y-x
注意一下正负
#include<cstdio>
#define LL long long
using namespace std;
LL x,y,m,n,l,a,b,c;
LL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);}
LL exgcd(LL a,LL b,LL &x,LL &y)
{
if(!b) x=1,y=0;
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=l;c=x-y;
int t=gcd(a,b);
if(c%t)
{
printf("Impossible\n");
return 0;
}
a/=t,b/=t,c/=t;
x=y=0;
exgcd(a,b,x,y);
x=((c*x)%b+b)%b;
if(!x) x+=b;
printf("%lld\n",x);
return 0;
}