; Miller-Rabin prime tester
(let ((mod-exp (fileVal "mod-exp")))
(lambda (a n) (or (= n 2)
   (let* ((nm1 (- n 1))(pr
      (let z ((d nm1)(k 0))(if (odd? d)(cons d k) (z (/ d 2)(+ k 1)))))
          (d (car pr))(s (cdr pr)))
   (let lp ((r 0)(y (mod-exp a d n)))
       (or (and (= r 0)(= y 1)) (= y nm1)
       (and (< r (- s 1))(lp (+ r 1)(modulo (* y y) n)))))))))
 
 ((fileVal "Miller-Rabin") 675938 1000000000001)