]> gitweb.factorcode.org Git - factor.git/commitdiff
Add math.primes:nprimes
authorSamuel Tardieu <sam@rfc1149.net>
Fri, 20 May 2011 10:38:27 +0000 (12:38 +0200)
committerSamuel Tardieu <sam@rfc1149.net>
Fri, 20 May 2011 10:38:27 +0000 (12:38 +0200)
basis/math/primes/primes-docs.factor
basis/math/primes/primes-tests.factor
basis/math/primes/primes.factor

index 74aa2ebca36763d93ec9016d03e40e5b411c0ed1..a78f444b21dbc76b0c159c7fa4f462046f268019 100644 (file)
@@ -11,7 +11,11 @@ HELP: prime?
 { $values { "n" "an integer" } { "?" "a boolean" } }
 { $description "Test if an integer is a prime number." } ;
 
-{ primes-upto primes-between } related-words
+{ nprimes primes-upto primes-between } related-words
+
+HELP: nprimes
+{ $values { "n" "a non-negative integer" } { "seq" "a sequence" } }
+{ $description "Return a sequence containing the " { $snippet "n" } " first primes numbers." } ;
 
 HELP: primes-upto
 { $values { "n" "an integer" } { "seq" "a sequence" } }
index a2e9f4fa4813ea2b1900866bd68fa9ff7c38d8dd..22d3bcc7ba88fc19b0824eabdc32dda951931f01 100644 (file)
@@ -8,6 +8,11 @@ IN: math.primes.tests
 { { 2 } } [ 2 primes-upto >array ] unit-test
 { { } } [ 1 primes-upto >array ] unit-test
 { { 999983 1000003 } } [ 999982 1000010 primes-between >array ] unit-test
+{ { } } [ 0 nprimes ] unit-test
+{ { 2 3 5 7 } } [ 4 nprimes ] unit-test
+{ t } [ 1000 nprimes [ prime? ] all? ] unit-test
+{ 1000 } [ 1000 nprimes length ] unit-test
+{ 1000 } [ 1000 nprimes last primes-upto length ] unit-test
 
 { { 4999963 4999999 5000011 5000077 5000081 } }
 [ 4999962 5000082 primes-between >array ] unit-test
index 7611e22b70cf60591e8a38d6af5ffd0a15062270..a4f0973f295f03dc0f8d752252125e431a8ee24b 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2007-2009 Samuel Tardieu.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: combinators combinators.short-circuit fry kernel math
+USING: combinators combinators.short-circuit fry kernel make math
 math.bitwise math.functions math.order math.primes.erato
 math.primes.erato.private math.primes.miller-rabin math.ranges
 literals random sequences sets vectors ;
@@ -66,6 +66,8 @@ PRIVATE>
 
 : primes-upto ( n -- seq ) 2 swap primes-between ;
 
+: nprimes ( n -- seq ) [ 2 swap [ dup , next-prime ] times ] { } make nip ;
+
 : coprime? ( a b -- ? ) gcd nip 1 = ; foldable
 
 : random-prime ( numbits -- p )