Lua中 sieve.lua 的源码分析

本文介绍了一个使用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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值