http://acm.pku.edu.cn/JudgeOnline/problem?id=1061
Код:
Program PKU1061;
Var X,Y,M,N,L,O:Int64;
Procedure Init;
Var X1,Y1,M1,N1,L1:Longint;
Begin
Readln(X1,Y1,M1,N1,L1);
X:=X1;Y:=Y1;M:=M1;N:=N1;L:=L1;
End;
Function Gcd(A,B:Int64;Var X,Y:Int64):Int64;
Var T:Int64;
Begin
If B=0 Then Begin
Gcd:=A;
X:=1;
Y:=0;
End Else Begin
Gcd:=Gcd(B,A Mod B,X,Y);
T:=X;
X:=Y;
Y:=T-(A Div B)*Y;
End;
End;
Procedure Main;
Var A,B,G,X1,Y1:Int64;
Begin
A:=M-N;
B:=Y-X;
If A=0 Then Begin
O:=-100;
Exit;
End;
If B=0 Then Begin
O:=0;
Exit;
End;
If A<0 Then Begin
A:=-A;
G:=M;M:=N;N:=G;
B:=-B;
G:=X;X:=Y;Y:=G;
End;
G:=Gcd(A,L,X1,Y1);
If Abs(B) Mod G<>0 Then Begin
O:=-100;
Exit;
End;
L:=L Div G;
X1:=X1*(B Div G);
Y1:=Y1*(B Div G);
X1:=X1 Mod L;
Y1:=Y1 Mod L;
If X1<0 Then Begin
X1:=(-X1) Mod L;
X1:=-X1;
X1:=X1+L;
X1:=X1+L;
End;
X1:=X1 Mod L;
O:=X1;
End;
Procedure Out;
Begin
If O=-100 Then Writeln('Impossible') Else Writeln(O);
End;
Begin
Init;
Main;
Out;
End.