REBOL [ Title: "Sieve of Eratosthenes" Author: "Ladislav Mecir" Email: lmecir@geocities.com Date: 11-Oct-2005/17:04:56+2:00 File: %sieve2.r Type: 'benchmark Purpose: { Inspired by BYTE Sieve Benchmark june 1988 no 6 Defines the infamous Eratosthenes Sieve Prime Yields primality flags for odd numbers. FLAGS/:I is true if and only if 2 * I + 1 is prime. } ] sieve: make rebcode! [ size /local flags-head flags prime series prime* ff discard ] [ add.i size 1 do flags-head [make block! size] ;set all flags true do discard [change/dup flags-head true size] set flags 1 while [lteq.i flags size] [ ;found a prime? pick ff flags-head flags eq.i ff true ift [ ;twice index + 1 set prime flags add.i prime flags add.i prime 1 ;kill multiples starting at prime * prime set series flags set prime* prime mul.i prime* flags add.i series prime* while [lteq.i series size] [ poke flags-head series false add.i series prime ] ] add.i flags 1 ] return flags-head ]