(lambda (b p m) (let mp ((p p)) (cond ((= p 0) 1) ((even? p)(let ((x (mp (/ p 2))))(modulo (* x x) m))) (#t (modulo (* b (mp (- p 1))) m))))