前端之家收集整理的这篇文章主要介绍了
Go语言的素数筛,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<!-- lang: cpp -->
package main
import (
"fmt"
"runtime"
"runtime/debug"
)
// 返回生成自然数序列的管道: 2,3,4,...
func GenerateNatural() chan int {
ch := make(chan int)
go func() {
for i := 2; ; i++ {
ch <- i
}
}()
return ch
}
// 管道过滤器: 删除能被素数整除的数
func PrimeFilter(in <-chan int,prime int) chan int {
out := make(chan int)
go func() {
for {
if i := <-in; i%prime != 0 {
out <- i
}
}
}()
return out
}
// 素数筛: 菊花链模型
func main() {
runtime.GOMAXPROCS(1)
debug.SetMaxThreads(5)
ch := GenerateNatural() // 自然数序列: 2,...
for i := 0; i < 100; i++ {
prime := <-ch // 新出现的素数
fmt.Printf("%v: %v\n",i+1,prime)
ch = PrimeFilter(ch,prime) // 基于新素数构造的过滤器
}
}