返回首页 - Notes - 2017

使用 Go 语言求取素数


概述

利用 Go 语言内建的并发特性求取 100 以内的全部素数


代码

package main

import "fmt"

func generate(ch chan<- int) {
  for i := 2; ; i++ {
    ch <- i
  }
}

func filter(src <-chan int, dst chan<- int, prime int) {
  for i := range src {
    if i%prime != 0 {
      dst <- i
    }
  }
}

func prime(max int) {
  ch := make(chan int)
  go generate(ch)

  for {
    num := <-ch

    if max > 0 {
      if num > max {
        break
      }
    }

    fmt.Println(num)

    dst := make(chan int)
    go filter(ch, dst, num)

    ch = dst
  }
}

func main() {
  prime(100)
}

date:2017-07-02