Merge branch 'master' of git://github.com/slavapestov/factor
commit
b7f5d2f85b
|
@ -1,10 +1,14 @@
|
||||||
USING: help.markup help.syntax ;
|
USING: byte-arrays help.markup help.syntax kernel math ;
|
||||||
IN: math.primes.erato
|
IN: math.primes.erato
|
||||||
|
|
||||||
HELP: sieve
|
HELP: sieve
|
||||||
{ $values { "n" "the greatest odd number to consider" } { "arr" "a bit array" } }
|
{ $values { "n" integer } { "arr" byte-array } }
|
||||||
{ $description "Apply Eratostene sieve up to " { $snippet "n" } ". Primality can then be tested using " { $link marked-prime? } "." } ;
|
{ $description "Apply Eratostene sieve up to " { $snippet "n" }
|
||||||
|
". " { $snippet "n" } " must be greater than 1"
|
||||||
|
". Primality can then be tested using " { $link marked-prime? } "." } ;
|
||||||
|
|
||||||
HELP: marked-prime?
|
HELP: marked-prime?
|
||||||
{ $values { "n" "an integer" } { "arr" "a byte array returned by " { $link sieve } } { "?" "a boolean" } }
|
{ $values { "n" integer } { "arr" byte-array } { "?" boolean } }
|
||||||
{ $description "Check whether an odd integer between 3 and the limit given to " { $link sieve } " has been marked as a prime number."} ;
|
{ $description "Checks whether " { $snippet "n" } " has been marked as a prime number. "
|
||||||
|
{ $snippet "arr" } " must be " { $instance byte-array } " returned by " { $link sieve } ". "
|
||||||
|
{ $snippet "n" } " must be between 2 and the limit given to " { $link sieve } "." } ;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
USING: byte-arrays math math.bitwise math.primes.erato sequences tools.test ;
|
USING: kernel byte-arrays sequences tools.test ;
|
||||||
|
USING: math math.bitwise math.ranges math.primes.erato ;
|
||||||
|
|
||||||
[ B{ 255 251 247 126 } ] [ 100 sieve ] unit-test
|
[ B{ 255 251 247 126 } ] [ 100 sieve ] unit-test
|
||||||
[ 1 100 sieve marked-prime? ] [ bounds-error? ] must-fail-with
|
[ 1 100 sieve marked-prime? ] [ bounds-error? ] must-fail-with
|
||||||
|
@ -8,3 +9,8 @@ USING: byte-arrays math math.bitwise math.primes.erato sequences tools.test ;
|
||||||
|
|
||||||
! There are 25997 primes below 300000. 1 must be removed and 3 5 7 added.
|
! There are 25997 primes below 300000. 1 must be removed and 3 5 7 added.
|
||||||
[ 25997 ] [ 299999 sieve [ bit-count ] map-sum 2 + ] unit-test
|
[ 25997 ] [ 299999 sieve [ bit-count ] map-sum 2 + ] unit-test
|
||||||
|
|
||||||
|
! Check sieve array length logic by making sure we get the right
|
||||||
|
! end-point for numbers with all possibilities mod 30. If something
|
||||||
|
! were to go wrong, we'd get a bounds-error.
|
||||||
|
[ ] [ 2 100 [a,b] [ dup sieve marked-prime? drop ] each ] unit-test
|
||||||
|
|
|
@ -28,7 +28,7 @@ CONSTANT: masks B{ 0 128 0 0 0 0 0 64 0 0 0 32 0 16 0 0 0 8 0 4 0 0 0 2 0 0 0 0
|
||||||
2drop
|
2drop
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: init-sieve ( n -- arr ) 29 + 30 /i 255 <array> >byte-array ;
|
: init-sieve ( n -- arr ) 30 /i 1 + 255 <array> >byte-array ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue