GO-素数筛

素数筛

1、素数

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数

素数筛
在这里插入图片描述
a. 首先生成一个自然数序列
b. 为每一个素数构造一个筛子,过滤输入序列的是素数倍数的数, 并返回新的序列

素数筛虽然是一种优雅的并发程序结构, 但因为每个并发体处理任务的粒度太细微, 程序的整体性能不是理想。
对于细粒度的并发程序, CSP模型中固有的消息传递代价太高

2、Code

package main

import "fmt"

// GenerateNatural 生成自然数序列
func GenerateNatural() chan int {
	ch := make(chan int)
	go func() {
		for i := 2; ; i++ {
			ch <- i
		}
	}()
	return ch
}

// PrimeFilter 通道过滤器
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
}

// main 素数筛
func main() {
	// 生成自然数序列
	ch := GenerateNatural()
	for i := 0; i < 100; i++ {
		// 新出现的素数
		prime := <-ch
		fmt.Printf("%v: %v \n", i, prime)
		// 基于新素数构造过滤器
		ch = PrimeFilter(ch, prime)
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40601372/article/details/106794117