factor/extra/benchmark/nsieve/nsieve.factor

37 lines
844 B
Factor
Raw Normal View History

2007-09-20 18:09:08 -04:00
USING: math math.parser sequences sequences.private kernel
2008-09-10 23:11:40 -04:00
arrays make io ;
IN: benchmark.nsieve
2007-09-20 18:09:08 -04:00
: clear-flags ( step i seq -- )
2dup length >= [
3drop
] [
2008-12-17 20:28:07 -05:00
f 2over set-nth-unsafe [ over + ] dip clear-flags
2008-08-24 04:59:22 -04:00
] if ; inline recursive
2007-09-20 18:09:08 -04:00
: (nsieve) ( count i seq -- count )
2008-01-12 21:38:22 -05:00
2dup length < [
2007-09-20 18:09:08 -04:00
2dup nth-unsafe [
over dup 2 * pick clear-flags
[ 1 + ] 2dip ! increment count
] when [ 1 + ] dip (nsieve)
2007-09-20 18:09:08 -04:00
] [
2drop
2008-08-24 04:59:22 -04:00
] if ; inline recursive
2007-09-20 18:09:08 -04:00
: nsieve ( m -- count )
[ 0 2 ] dip 1 + t <array> (nsieve) ;
2007-09-20 18:09:08 -04:00
: nsieve. ( m -- )
[ "Primes up to " % dup # " " % nsieve # ] "" make print ;
: nsieve-main ( n -- )
[ 2^ 10000 * nsieve. ]
[ 1 - 2^ 10000 * nsieve. ]
[ 2 - 2^ 10000 * nsieve. ]
tri ;
2007-09-20 18:09:08 -04:00
: nsieve-main* ( -- ) 9 nsieve-main ;
2007-09-20 18:09:08 -04:00
MAIN: nsieve-main*