Lua中 sieve.lua 的源码分析

[b][b]-- sieve.lua
-- the sieve of Eratosthenes programmed with coroutines
-- typical usage: lua -e N=500 sieve.lua | column

-- generate all the numbers from 2 to n
function gen (n)
return coroutine.wrap(function ()
for i=2,n do
coroutine.yield(i)[b][/b]
end
end)
end

-- filter the numbers generated by `g', removing multiples of `p'
function filter (p, g)
return coroutine.wrap(function ()
for n in g do --循环取模 g集合中是前面满足条件的所有素数
print("this is ",n,p)
if n%p ~= 0 then coroutine.yield(n) end--返回满足条件的素数
end
end)
end

N=N or 20 -- from command line
x = gen(N) -- generate primes up to N 返回一个协作程序(线程)
while 1 do
local n = x() -- pick a number until done 调用一次,返回下一个素数
if n == nil then break end --如果没有下一个,则程序中止
print(n) -- must be a prime number
x = filter(n, x) -- now remove its multiples
end
[/b][/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值