RosettaCodeData/Task/Modular-inverse/Prolog/modular-inverse.pro

11 lines
188 B
Prolog
Raw Permalink Normal View History

2020-02-17 23:21:07 -08:00
egcd(_, 0, 1, 0) :- !.
egcd(A, B, X, Y) :-
divmod(A, B, Q, R),
egcd(B, R, S, X),
Y is S - Q*X.
modinv(A, B, N) :-
egcd(A, B, X, Y),
A*X + B*Y =:= 1,
N is X mod B.