(lambda (p) (list
    (lambda (a b) (let ((x (+ a b))) (if (< x p) x (- x p))))
    (lambda (a) (if (zero? a) 0 (- p a)))
    (lambda (a b) (modulo (* a b) p))
    (let* ((egcd (fileVal "egcd"))
           (rc (lambda (j) (modulo (cdr (egcd p j)) p))))
        (if (< p 10000) (let ((a (make-vector p 0)))
          (lambda (x) (let ((z (vector-ref a x)))
          (if (zero? z) (let ((y (rc x))) (vector-set! a x y) (vector-set! a y x)))
          (vector-ref a x)))) rc))))