Go语言的素数筛

前端之家收集整理的这篇文章主要介绍了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) // 基于新素数构造的过滤器
	}
}

猜你在找的Go相关文章