(define (square x) (* x x)) (display (let powmod ((x (read)) (e (read)) (m (read))) ; let's ignore negative e here (cond ((= e 0) 1) ((= e 1) (remainder x m)) ((even? e) (remainder (square (powmod x (/ e 2) m)) m)) (else (remainder (* (square (powmod x (quotient e 2) m)) x) m))))) (newline)