加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
eg14.8-sieve2.go 677 Bytes
一键复制 编辑 原始数据 按行查看 历史
Letotn 提交于 2023-02-11 16:51 . add eg.14.7 & 14.8 sieve
package main
import "fmt"
// 打印素数
// 使用通道工厂方法
func generate() chan int {
ch := make(chan int)
go func() {
for i := 2; ; i++ {
ch <- i
}
}()
return ch
}
func filter(in chan int, prime int) chan int {
out := make(chan int)
go func() {
for {
i := <-in
if i%prime != 0 {
out <- i
}
}
}()
return out
}
func sieve() chan int {
out := make(chan int)
go func() {
ch := generate()
for {
prime := <-ch
// 不能被prime整除的值放入chan替换掉ch, 进入下一个循环
ch = filter(ch, prime)
out <- prime
}
}()
return out
}
func main() {
primes := sieve()
for {
fmt.Print(<-primes, " ")
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化