(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))))
