aboutsummaryrefslogtreecommitdiffstats
path: root/primes.scm
diff options
context:
space:
mode:
authorDavid N. Welton <davidw@efn.org>1998-11-09 21:18:01 -0800
committerBryan Newbold <bnewbold@robocracy.org>2017-02-20 00:05:27 -0800
commit926b1b647ac830660933a5e63eb52d4a2552e264 (patch)
treee25db5f6e1441d67f5d9af063432018ee20a5f51 /primes.scm
parentb21cac3362022718634f7086964208b2eed8e897 (diff)
parentfa3f23105ddcf07c5900de47f19af43d1db1b597 (diff)
downloadslib-926b1b647ac830660933a5e63eb52d4a2552e264.tar.gz
slib-926b1b647ac830660933a5e63eb52d4a2552e264.zip
Import Debian changes 2c3-3debian/2c3-3
slib (2c3-3) frozen unstable; urgency=low * Fixes #16235. * Fixes #19943. * Fixes #20265. * Fixes #24917. * Fixes #27389. slib (2c3-2) frozen unstable; urgency=low * Re-uploaded for slink freeze. slib (2c3-1) unstable; urgency=low * New upstream release.
Diffstat (limited to 'primes.scm')
-rw-r--r--primes.scm28
1 files changed, 17 insertions, 11 deletions
diff --git a/primes.scm b/primes.scm
index 769e2bc..672e899 100644
--- a/primes.scm
+++ b/primes.scm
@@ -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.
;;