; (egcd a b) => (x . y) such that ax+by = (gcd a b)
(lambda (a b)
(let egcd ((a a) (b b)) (if (= b 0) '(1 . 0) (let* ((q (quotient a b)) (r (- a (* q b))))
   (if (zero? r) '(0 . 1) (let ((c (egcd b r))) (cons (cdr c) (- (car c) (* (cdr c) q)))))))))
