#lang racket (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))))