求解方程(m-n)*a+l*b=(y-x) 是否有解,如果有解求a大于0的最小解为多少。
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
typedef long long ll;
void gcd(ll a,ll b,ll &d,ll &x,ll &y)
{
if(!b) {d=a;x=1;y=0;}
else
{
gcd(b,a%b,d,y,x);y-=x*(a/b);
}
}
int main()
{
ll n,m,x,y,l;
while(cin>>x>>y>>m>>n>>l)
{
if(m<n) swap(n,m),swap(x,y);
ll a=m-n;
ll b=l;
ll c=y-x;
ll ans;
//printf("%d %d\n",a,b);
gcd(a,b,ans,x,y);
if(c%ans==0)
{
x=x*c/ans;
y=y*c/ans;
//printf("%lld*%lld+%lld*%lld=%lld\n",a,x,b,y,c);
ll b1=b/ans;
ll s=l/ans;
if(x<0)
{
if(-x%b1==0)
x=0;
else
x=x+(-x/b1+1)*b1;
//printf("x=%lld %lld\n",x,b1);
}
if(x>b1)
{
if(x%b1==0) x=0;
else
x=x-(x/b1*b1);
}
printf("%lld\n",x);
}
else printf("Impossible\n");
}
return 0;
}