diff options
Diffstat (limited to 'coding-exercises/1/24.rkt')
| -rw-r--r-- | coding-exercises/1/24.rkt | 31 |
1 files changed, 3 insertions, 28 deletions
diff --git a/coding-exercises/1/24.rkt b/coding-exercises/1/24.rkt index 9dae66c..969a135 100644 --- a/coding-exercises/1/24.rkt +++ b/coding-exercises/1/24.rkt @@ -1,33 +1,8 @@ #lang racket -(require racket/pretty) +(require "../../shared/chapter1.rkt") (require sicp) -(define (next n) - (if (= n 2) 3 (+ n 2))) - -(define (square x) (* x x)) - -(define (divides? a b) - (= (remainder b a) 0)) - -(define (find-divisor n test-divisor) - (cond ((> (square test-divisor) n) n) - ((divides? test-divisor n) test-divisor) - (else (find-divisor n (next test-divisor))))) - -(define (smallest-divisor n) - (find-divisor n 2)) - -(define (prime? n) - (= n (smallest-divisor n))) - -(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 expmod (expmoder (lambda (b e m x) x))) (define (fermat-test n) (define (try-it a) @@ -35,7 +10,7 @@ (try-it (+ 1 (random (- n 1))))) (define (fast-prime? n times) - (cond + (cond ((= times 0) true) ((fermat-test n) (fast-prime? n (- times 1))) (else false))) |
