add factor-alist and export it (chibi math prime)

a more useful version of factor
This commit is contained in:
Roger Crew 2021-06-27 04:50:42 -07:00
parent 680aede9ae
commit 2759aaa306
3 changed files with 16 additions and 1 deletions

View file

@ -90,6 +90,11 @@
(test '(3 3 3 5 7) (factor 945)) (test '(3 3 3 5 7) (factor 945))
(test-error (factor 0)) (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 0 (aliquot 1))
(test 975 (aliquot 945)) (test 975 (aliquot 945))
(test-error (aliquot 0)) (test-error (aliquot 0))

View file

@ -226,6 +226,15 @@
(lp (+ i 2) (+ ii (* (+ i 1) 4)) (lp (+ i 2) (+ ii (* (+ i 1) 4))
n (put res i k))))))))))))) 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 ;;> Returns the factorization of \var{n} as a monotonically
;;> increasing list of primes. ;;> increasing list of primes.
(define (factor n) (define (factor n)

View file

@ -5,7 +5,8 @@
((library (srfi 151)) (import (srfi 151))) ((library (srfi 151)) (import (srfi 151)))
((library (srfi 33)) (import (srfi 33))) ((library (srfi 33)) (import (srfi 33)))
(else (import (srfi 60)))) (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 totient aliquot
provable-prime? probable-prime? provable-prime? probable-prime?
random-prime random-prime-distinct-from random-prime random-prime-distinct-from