diff options
Diffstat (limited to 'primes.scm')
-rw-r--r-- | primes.scm | 28 |
1 files changed, 17 insertions, 11 deletions
@@ -85,23 +85,26 @@ ;; Is `n' Divisible By a Small Prime? ;; -(define (primes:dbsp? n) - (let ((limit (min (sqrt n) primes:max-small-prime)) - (divisible #f) - ) - (do ((i 0 (1+ i))) - ((let* ((divisor (vector-ref primes:small-primes i))) - (set! divisible (= (modulo n divisor) 0)) - (or divisible (>= divisor limit))) - divisible) - ))) +(define primes:dbsp? + (let ((sqrt (cond ((provided? 'inexact) sqrt) + (else (require 'root) integer-sqrt)))) + (lambda (n) + (let ((limit (min (sqrt n) primes:max-small-prime)) + (divisible #f) + ) + (do ((i 0 (1+ i))) + ((let* ((divisor (vector-ref primes:small-primes i))) + (set! divisible (= (modulo n divisor) 0)) + (or divisible (> divisor limit))) + divisible) + ))))) ;; Does `n' pass the R.-M. primality test for `m' random numbers? ;; (define (primes:rm-prime? n m) (do ((i 0 (1+ i)) - (x (+ 2 (random (- n 2))))) + (x (+ 2 (random (- n 2) primes:prngs)))) ((or (= i m) (primes:rm-composite? n x)) (= i m)))) @@ -150,6 +153,9 @@ (set! y (modulo (* y z) modulus))) )) +(define primes:prngs + (make-random-state "repeatable seed for primes")) + ;; This table seems big enough so that making it larger really ;; doesn't have much effect. ;; |