From 2759aaa306a5a570679a8793641f31845870784f Mon Sep 17 00:00:00 2001 From: Roger Crew Date: Sun, 27 Jun 2021 04:50:42 -0700 Subject: [PATCH] add factor-alist and export it (chibi math prime) a more useful version of factor --- lib/chibi/math/prime-test.sld | 5 +++++ lib/chibi/math/prime.scm | 9 +++++++++ lib/chibi/math/prime.sld | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/chibi/math/prime-test.sld b/lib/chibi/math/prime-test.sld index 4c2859e0..fab6cbb7 100644 --- a/lib/chibi/math/prime-test.sld +++ b/lib/chibi/math/prime-test.sld @@ -90,6 +90,11 @@ (test '(3 3 3 5 7) (factor 945)) (test-error (factor 0)) + (test '() (factor-alist 1)) + (test '((2 . 3) (3 . 2)) (factor-alist 72)) + (test '((3 . 3) (5 . 1) (7 . 1)) (factor-alist 945)) + (test-error (factor-alist 0)) + (test 0 (aliquot 1)) (test 975 (aliquot 945)) (test-error (aliquot 0)) diff --git a/lib/chibi/math/prime.scm b/lib/chibi/math/prime.scm index a15f407f..dc9745e8 100644 --- a/lib/chibi/math/prime.scm +++ b/lib/chibi/math/prime.scm @@ -226,6 +226,15 @@ (lp (+ i 2) (+ ii (* (+ i 1) 4)) n (put res i k))))))))))))) +;;> Returns the factorization of \var{n} as a list of +;;> elements of the form \scheme{(\var{p} . \var{k})}, +;;> where \var{p} is a prime factor +;;> and \var{k} is its multiplicity. +(define factor-alist + (let ((rfactor (make-factorizer '() + (lambda (l p k) (cons (cons p k) l))))) + (lambda (n) (reverse (rfactor n))))) + ;;> Returns the factorization of \var{n} as a monotonically ;;> increasing list of primes. (define (factor n) diff --git a/lib/chibi/math/prime.sld b/lib/chibi/math/prime.sld index 3867190c..1120b79a 100644 --- a/lib/chibi/math/prime.sld +++ b/lib/chibi/math/prime.sld @@ -5,7 +5,8 @@ ((library (srfi 151)) (import (srfi 151))) ((library (srfi 33)) (import (srfi 33))) (else (import (srfi 60)))) - (export prime? nth-prime prime-above prime-below factor perfect? + (export prime? nth-prime prime-above prime-below + factor factor-alist perfect? totient aliquot provable-prime? probable-prime? random-prime random-prime-distinct-from