]> gitweb.factorcode.org Git - factor.git/blob - extra/benchmark/nsieve-bits/nsieve-bits.factor
factor: trim using lists
[factor.git] / extra / benchmark / nsieve-bits / nsieve-bits.factor
1 USING: math math.parser sequences sequences.private kernel
2 bit-arrays make io ;
3 IN: benchmark.nsieve-bits
4
5 : clear-flags ( step i seq -- )
6     2dup length >= [
7         3drop
8     ] [
9         f 2over set-nth-unsafe [ over + ] dip clear-flags
10     ] if ; inline recursive
11
12 : (nsieve-bits) ( count i seq -- count )
13     2dup length < [
14         2dup nth-unsafe [
15             over dup 2 * pick clear-flags
16             [ 1 + ] 2dip ! increment count
17         ] when [ 1 + ] dip (nsieve-bits)
18     ] [
19         2drop
20     ] if ; inline recursive
21
22 : nsieve-bits ( m -- count )
23     [ 0 2 ] dip 1 + <bit-array> dup set-bits (nsieve-bits) ;
24
25 : nsieve-bits. ( m -- )
26     [ "Primes up to " % dup # " " % nsieve-bits # ] "" make
27     print ; inline
28
29 : nsieve-bits-main ( n -- )
30     [ 2^ 10000 * nsieve-bits. ]
31     [ 1 - 2^ 10000 * nsieve-bits. ]
32     [ 2 - 2^ 10000 * nsieve-bits. ]
33     tri ;
34
35 : nsieve-bits-benchmark ( -- ) 11 nsieve-bits-main ;
36
37 MAIN: nsieve-bits-benchmark