#include <stdio.h>
long long gcd( long long x, long long y )
{
if( y== 0 )
{
return x;
}
return gcd( y, x% y );
}
void exgcd( long long a, long long b, long long &x, long long &y )
{
if( b== 0 )
{
x= 1;
y= 0;
return;
}
exgcd( b, a% b, x, y );
long long t= x;
x= y;
y= t- a/ b* y;
return;
}
int main( )
{
long long int x, y, m, n, l;
while( scanf( "%lld %lld %lld %lld %lld", &x, &y, &m, &n, &l )!= EOF )
{
long long a= n- m, b= l, c= x- y, p, q;
long long d= gcd( a, b );
if( c% d )
{
puts( "Impossible" );
continue;
}
a/= d, b/= d, c/= d;
exgcd( a, b, p, q );
p*= c;
long long t= p% b;
while( t< 0 )
{
t+= b;
}
printf( "%lld\n", t );
}
return 0;
}
long long gcd( long long x, long long y )
{
if( y== 0 )
{
return x;
}
return gcd( y, x% y );
}
void exgcd( long long a, long long b, long long &x, long long &y )
{
if( b== 0 )
{
x= 1;
y= 0;
return;
}
exgcd( b, a% b, x, y );
long long t= x;
x= y;
y= t- a/ b* y;
return;
}
int main( )
{
long long int x, y, m, n, l;
while( scanf( "%lld %lld %lld %lld %lld", &x, &y, &m, &n, &l )!= EOF )
{
long long a= n- m, b= l, c= x- y, p, q;
long long d= gcd( a, b );
if( c% d )
{
puts( "Impossible" );
continue;
}
a/= d, b/= d, c/= d;
exgcd( a, b, p, q );
p*= c;
long long t= p% b;
while( t< 0 )
{
t+= b;
}
printf( "%lld\n", t );
}
return 0;
}
本文介绍了如何使用GCD(最大公约数)和ExGCD(扩展欧几里得)算法解决整数求解问题,包括输入四个长整型变量x, y, m, n, l并进行相应的计算,输出结果为整数c除以d的余数。
1493

被折叠的 条评论
为什么被折叠?



