3 /* The Great Computer Language Shootout
4 http://shootout.alioth.debian.org
6 contributed by Ian Osgood */
8 Sequence pad
:= method(w
, s
:=self; while (s size
< w
, s
=" ".. s
) )
9 Number clearBit
:= method(b
, &(1 clone shiftLeft(b
) bitwiseComplement
) )
11 sieve
:= Object clone do(
12 flags
:= Sequence
clone do(
13 isSet
:= method(i
, at(i
/8) at(i
%8) != 0)
14 clear
:= method(i
, atPut(i
/8, at(i
/8) clearBit(i
%8) ) )
17 flags
setSize((n
/8) ceil
)
18 for (i
, 0, flags size
- 1, flags
atPut(i
, 255))
23 if (i
+i
< n
, for (j
, i
+i
, n
-1, i
, flags
clear(j
) ) )
26 writeln("Primes up to", n asString
pad(9), primes asString
pad(9))
30 n
:= System args
at(1) asNumber
31 sieve
show(10000 shiftLeft(n
))
32 sieve
show(10000 shiftLeft(n
-1))
33 sieve
show(10000 shiftLeft(n
-2))