root/src/lua-5.1.3/test/sieve.lua

Revision 5c8778c4361d2ad3adc94ef98d804c6fa9e6ba7c, 0.8 kB (checked in by Theo Schlossnagle <jesus@omniti.com>, 10 years ago)

import lua... I'd like to write checkers in lua

  • Property mode set to 100644
Line 
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
Note: See TracBrowser for help on using the browser.