扩展欧几里得算法 百度百科
代码如下:
#include <stdio.h>
__int64 gcd( __int64 x,__int64 y)
{
if(y== 0) return x;
return gcd(y,x%y);
}
void exgcd( __int64 a,__int64 b,__int64 &x,__int64 &y)
{
if(b== 0)
{
x= 1;
y= 0;
return;
}
exgcd(b,a% b,x,y);
__int64 t= x;
x=y;
y=t-a/b*y;
return;
}
int main()
{
__int64 x, y, m, n, l;
while(scanf( "%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l)!=EOF)
{
__int64 a= n- m, b= l, c= x- y, p, q;
__int64 d= gcd( a, b );
if(c%d)
{
printf("Impossible\n");
continue;
}
a/=d, b/=d, c/=d;
exgcd(a,b,p,q );
p*= c;
__int64 t= p% b;
while(t<0)
t+= b;
printf("%I64d\n",t);
}
return 0;
}