Skip to content

Sieve of Eratosthenes

editable example

Click the pencil to open this in an editor, change it, and run it in your browser. The same solution is posted on Rosetta Code.

ghul
use IO.Std.write_line
use Collections
use Ghul.Pipes
sieve(limit: int) -> List[int] is
let composite = LIST()
(0::limit) |> each(_ => composite.add(false))
let prime mut = 2
while prime * prime <= limit do
if !composite[prime] then
let multiple mut = prime * prime
while multiple <= limit do
composite[multiple] = true
multiple = multiple + prime
od
fi
prime = prime + 1
od
return
(2::limit)
|> filter(i => !composite[i])
|> collect()
si
for prime in sieve(100) do
write_line("{prime}")
od