I am trying to figure out how to convert this recursive Scheme definition into a non-recursive loop function in C. I've just started learning C after Scheme and loops are still confusing to me.
This is the recursive version in scheme:
Code:
#lang racket
(define (powmod2 x e m)
(define xsqrm (remainder (* x x) m))
(cond
[(= e 0) 1]
[(even? e) (powmod2 xsqrm (/ e 2) m)]
[(odd? e) (remainder (* x (powmod2 xsqrm (/ (sub1 e) 2) m)) m)]))
This is my non-working code in C:
Code:
int powmod2(int x, int e, int m) {
int ans = 1;
while (e != 0) {
x=x*x%m;
if(e%2 == 0) {
e=e/2;
}
else {
e=(e-1)/2;
ans=(ans*x)%m;
}
}
return ans;
}
Any guidance would really be appreciated!