RosettaCodeData/Task/Modular-inverse/EchoLisp/modular-inverse.echolisp

11 lines
272 B
Plaintext

(lib 'math) ;; for egcd = extended gcd
(define (mod-inv x m)
(define-values (g inv q) (egcd x m))
(unless (= 1 g) (error 'not-coprimes (list x m) ))
(if (< inv 0) (+ m inv) inv))
(mod-inv 42 2017) → 1969
(mod-inv 42 666)
🔴 error: not-coprimes (42 666)