Add divisors to math.primes.factors

db4
Samuel Tardieu 2009-06-29 16:55:44 +02:00
parent 3c91ad043f
commit 4d5392fe56
3 changed files with 13 additions and 3 deletions

View File

@ -1,7 +1,7 @@
USING: help.markup help.syntax math sequences ;
IN: math.primes.factors
{ factors group-factors unique-factors } related-words
{ divisors factors group-factors unique-factors } related-words
HELP: factors
{ $values { "n" "a positive integer" } { "seq" sequence } }
@ -21,3 +21,7 @@ HELP: unique-factors
HELP: totient
{ $values { "n" "a positive integer" } { "t" integer } }
{ $description { "Return the number of integers between 1 and " { $snippet "n-1" } " that are relatively prime to " { $snippet "n" } "." } } ;
HELP: divisors
{ $values { "n" "a positive integer" } { "seq" sequence } }
{ $description { "Return the ordered list of divisors of " { $snippet "n" } ", including 1 and " { $snippet "n" } "." } } ;

View File

@ -1,4 +1,4 @@
USING: math.primes.factors tools.test ;
USING: math.primes.factors sequences tools.test ;
{ { 999983 999983 1000003 } } [ 999969000187000867 factors ] unit-test
{ { } } [ -5 factors ] unit-test
@ -8,3 +8,5 @@ USING: math.primes.factors tools.test ;
{ 0 } [ 1 totient ] unit-test
{ { 425612003 } } [ 425612003 factors ] unit-test
{ { 13 4253 15823 32472893749823741 } } [ 28408516453955558205925627 factors ] unit-test
{ { 1 2 3 4 6 8 12 24 } } [ 24 divisors ] unit-test
{ 24 } [ 360 divisors length ] unit-test

View File

@ -1,7 +1,7 @@
! Copyright (C) 2007-2009 Samuel Tardieu.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays combinators kernel make math math.functions
math.primes sequences ;
math.primes math.ranges sequences sequences.product sorting ;
IN: math.primes.factors
<PRIVATE
@ -41,3 +41,7 @@ PRIVATE>
{ [ dup 2 < ] [ drop 0 ] }
[ dup unique-factors [ 1 [ 1- * ] reduce ] [ product ] bi / * ]
} cond ; foldable
: divisors ( n -- seq )
group-factors [ first2 [0,b] [ ^ ] with map ] map
[ product ] product-map natural-sort ;