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.