Skip to content

Instantly share code, notes, and snippets.

@trptcolin
Created May 11, 2009 04:34
Show Gist options
  • Save trptcolin/109870 to your computer and use it in GitHub Desktop.
Save trptcolin/109870 to your computer and use it in GitHub Desktop.
(load "/Users/colin/lib/test-manager/load.scm")
(define (prime-factors product)
(list-factors product 2))
(define (list-factors product test-factor)
(if (< product 2)
(list)
(if (= 0 (modulo product test-factor))
(append (list test-factor) (list-factors (/ product test-factor) test-factor))
(list-factors product (+ 1 test-factor)))))
(define-each-test
(assert-equal (list) (prime-factors 0))
(assert-equal (list) (prime-factors 1))
(assert-equal (list 2) (prime-factors 2))
(assert-equal (list 3) (prime-factors 3))
(assert-equal (list 2 2) (prime-factors 4))
(assert-equal (list 5) (prime-factors 5))
(assert-equal (list 2 3) (prime-factors 6))
(assert-equal (list 7) (prime-factors 7))
(assert-equal (list 2 2 2) (prime-factors 8))
(assert-equal (list 3 3) (prime-factors 9))
(assert-equal (list 2 5) (prime-factors 10))
(assert-equal (list 2 2 3) (prime-factors 12))
(assert-equal (list 2 2 2 2) (prime-factors 16))
(assert-equal (list 2 2 3 3) (prime-factors 36))
(assert-equal (list 2 5 7 11 41) (prime-factors (* 2 5 7 11 41)))
)
(run-registered-tests)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment