]> git.proxmox.com Git - ceph.git/blob - ceph/src/civetweb/src/third_party/lua-5.1.5/test/sieve.lua
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / civetweb / src / third_party / lua-5.1.5 / test / sieve.lua
1 -- the sieve of of Eratosthenes programmed with coroutines
2 -- typical usage: lua -e N=1000 sieve.lua | column
3
4 -- generate all the numbers from 2 to n
5 function gen (n)
6 return coroutine.wrap(function ()
7 for i=2,n do coroutine.yield(i) end
8 end)
9 end
10
11 -- filter the numbers generated by `g', removing multiples of `p'
12 function filter (p, g)
13 return coroutine.wrap(function ()
14 while 1 do
15 local n = g()
16 if n == nil then return end
17 if math.mod(n, p) ~= 0 then coroutine.yield(n) end
18 end
19 end)
20 end
21
22 N=N or 1000 -- from command line
23 x = gen(N) -- generate primes up to N
24 while 1 do
25 local n = x() -- pick a number until done
26 if n == nil then break end
27 print(n) -- must be a prime number
28 x = filter(n, x) -- now remove its multiples
29 end