The following program is designed to calculate base^expo mod m.
(define (expmod base expo m)
  (define (square n)
    (* n n))
  (define (even? n)
    (= (remainder n 2) 0))
  (define (expmod-iter base expo m result)
    (cond ((= expo 0) result)
          ((even? expo)
           (expmod-iter base
                        (/ expo 2)
                        m
                        (remainder (square result) m)))
          (else
            (expmod-iter base
                         (- expo 1)
                         m
                         (remainder (* base result) m)))))
  (expmod-iter base expo m 1))
In fact, I'm trying to convert a tail-recursive program from SICP to its iterative equivalent. Here is the original program:
(define (expmod base exp m)
  (cond ((= exp 0) 1)
        ((even? exp)
         (remainder (square (expmod base (/ exp 2) m))
                    m))
        (else
         (remainder (* base (expmod base (- exp 1) m))
                    m))))  
The result of (expmod 42 1000000007 1000000007) is 270001056, but according to Fermat's Little Theorem, since 1000000007 is prime, the result should be 42.
What am I doing wrong?
 
    