ll x,y,m,n,l;
ll a,b,c;
ll k1,k2,d;
ll gcd (ll x,ll y)
{
if(x<y) swap(x,y);
if(y==0) return x;
return gcd(y,x%y);
}
void fun(ll a,ll b)
{
// cout<<a<<" "<<b<<endl;
if(b==0)
{
k1=1; k2=0;d=a; return ;
}
fun(b,a%b);
ll tp=k1;
k1=k2;
k2=tp-(a/b)*k2;
// cout<<k1<<" "<<k2<<endl;
return ;
}
int main()
{
while(cin>>x>>y>>m>>n>>l)
{
c=y-x;
a=m-n;
if(a<0) a=-a,c=-c;
b=l;
if(c%gcd(a,b)!=0)
printf("Impossible\n");
else
{
fun(a,b);
// cout<<k1<<" "<<k2<<endl;
k1=k1*c/d;
l=l/d;
k1%=l;
if(k1<0) k1+=l;
cout<<k1<<endl;
}
}
}
欧几里得扩展方程
最新推荐文章于 2021-11-12 20:16:44 发布