]> gitweb.factorcode.org Git - factor.git/commitdiff
benchmark.sieve: calculating the number of primes in [1,100,000,000].
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 7 Jun 2015 18:30:04 +0000 (11:30 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 7 Jun 2015 18:30:04 +0000 (11:30 -0700)
extra/benchmark/sieve/sieve.factor [new file with mode: 0644]

diff --git a/extra/benchmark/sieve/sieve.factor b/extra/benchmark/sieve/sieve.factor
new file mode 100644 (file)
index 0000000..b9168b3
--- /dev/null
@@ -0,0 +1,22 @@
+USING: bit-arrays kernel locals math math.functions math.ranges
+sequences ;
+IN: benchmark.sieve
+
+:: sieve ( n -- #primes )
+    n dup odd? [ 1 + ] when 2/ <bit-array> :> sieve
+    t 0 sieve set-nth
+
+    3 n sqrt 2 <range> [| i |
+        i 2/ sieve nth [
+            i sq n i 2 * <range> [| j |
+                t j 2/ sieve set-nth
+            ] each
+        ] unless
+    ] each
+
+    sieve [ not ] count 1 + ;
+
+: sieve-benchmark ( -- )
+    100,000,000 sieve 5,761,455 assert= ;
+
+MAIN: sieve-benchmark