diff options
Diffstat (limited to 'coding-exercises/1/27.rkt')
| -rw-r--r-- | coding-exercises/1/27.rkt | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/coding-exercises/1/27.rkt b/coding-exercises/1/27.rkt new file mode 100644 index 0000000..8762d6c --- /dev/null +++ b/coding-exercises/1/27.rkt @@ -0,0 +1,24 @@ +#lang racket +(require sicp) + +(define (square x) + (* x x)) + +(define (expmod base e m) + (cond + ((= e 0) 1) + ((even? e) + (remainder (square (expmod base (/ e 2) m)) m)) + (else + (remainder (* base (expmod base (- e 1) m)) m)))) + +(define (fermat? a n) + (= (expmod a n n) a)) + +(define (all-fermat n) + (define (f a n) + (cond + ((= a 0) true) + ((fermat? (- a 1) n) (f (- a 1) n)) + (else false))) + (f n n)) |
