一、要求统120000的数字中,哪些是素数?
package main
import "fmt"
//向intChan放入数据
func putNum(intChan chan int) {
for i:=0;i<=8000 ;i++ {
intChan<-i
}
//关闭管道
close(intChan)
}
//读取数据并判断素数放入管道
func primeNum(intChan,primeChan chan int,exitChan chan bool) {
//用于接收读取的管道数据
//判断是否是素数
var flag bool
//var ok bool = true
for {
num ,ok := <-intChan
if !ok {
break
}
flag = true //是素数
//判断num是不是素数
for i := 2;i< num ;i++ {
if num % i == 0{
flag = false
break
}
}
if flag {
//将素数存入管道
primeChan<- num
}
}
exitChan <- true
}
func main() {
intChan := make(chan int,1000)
primeChan := make(chan int,2000)
//标示管道退出
exitChan := make(chan bool,4)
//开启协程
go putNum(intChan)
for i:= 1;i <= 4 ;i++ {
go primeNum(intChan,primeChan,exitChan)
}
go func() {
for i := 1;i <= 4; i++ {
<- exitChan
}
close(primeChan)
}()
//取出结果
for {
res, ok := <- primeChan
if !ok {
break
}
fmt.Println(res)
}
}