outtest.rkt
#lang racket
(require racket/generator)

(define (mod-op op a b n)
  (modulo (op 
           (modulo a n)
           (modulo b n))
          n))

(define (mod-exp a x n)
  (cond ((zero? x) 1)
        ((odd? x)
         (mod-op * (mod-exp (mod-op * a a n) (quotient x 2) n) a n))
        ((even? x)
         (mod-exp (mod-op * a a n) (quotient x 2) n))))

(define (make-prime-generator) 
         (generator ()
          (let loop ((prime-list '())
                     (current 2))
            (cond ((foldr (λ (v l) (and v l)) #t (map (λ (x) (not (zero? x))) (map (λ (x) (modulo current x)) prime-list)))
                   (yield current)
                   (loop (cons current prime-list) (add1 current)))
                  (else
                   (loop prime-list (add1 current)))))))

; spits out r for an a, b where a and b are relatively prime