结题报告参考:http://hi.baidu.com/newmyl/item/dc6805253305833195f62b0a
#include <cstdio>
#include <cstring>
using std::memset;
long long x,y,m,n,l;
long long a,b,ansx,ansy, c, r;
long long exGcd(long long a, long long b, long long &x, long long &y)
{
if(b == 0)
{
x = 1;
y = 0;
return a;
}
long long r = exGcd(b, a%b, x, y);
long long t = x;
x = y;
y = t - a / b * y;
return r;
}
long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}
int main()
{
scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y, &m, &n, &l);
a = m - n;
b = l;
c = y - x;
r = gcd(a,b);
//首先要判断是否能够整除
if(c%r)
{
printf("Impossible\n");
}
else
{
//然后将系数除以gcd(a,b);
a /= r;
b /= r;
c /= r;
//求解ax+by = 1
exGcd(a, b, ansx, ansy);
//ax + by = c/r 的解为n*ansx, n*ansy; 全部解ansx = n*ansx + k*b, ansy = n*ansy - k*a
long long t = c*ansx/b;
ansx = c*ansx - t*b;
if(ansx < 0)
ansx += (b>0?b:-b);
printf("%I64d\n", ansx);
}
}