小工具知识网

当前位置: 首页 > 行业知识 > 使用 Go 语言统计 0-200000 的数字中,哪些是素数?

行业知识

使用 Go 语言统计 0-200000 的数字中,哪些是素数?

2026-11-01 08:10:48 来源:互联网转载

题目

使��� Go 语言统计 0-200000的数字中,哪些是素数?

()

思路

两种方法:

  1. 单循环遍历 1-200000 数字,并判断是否是素数。

    ()
  2. 使用了 Goroutine 和通道实现并发:

    • 通过创建两个通道 intChan 和 primeChan,以及一个 sync.WaitGroup 来协调 Goroutine 的执行。

    • 然后,启动三个 Goroutine:

      • InputIntChan:向 intChan 通道中写入整数数据。
      • PrimeCompute:从 intChan 通道中读取整数数据,并判断是否为素数,将素数写入 primeChan 通道。
      • readPrimeChan:从 primeChan 通道中读取素数数据并输出。

        最后,使用 sync.WaitGroup 等待所有 Goroutine 执行完毕。

代码实现

单循环实现

package mainimport ("fmt""math""time")func main() {start := time.Now().Unix() // 记录开始时间primeChan := make(chan int, 2000000) // 创建一个缓冲大小为2000000的素数通道for i := 0; i  // 判断从0到200000的整数是否为素数if isPrime(i) { // 如果是素数primeChan if n return false}for i := 2; i  // 只需遍历到sqrt(n)即可,减少计算量if n%i == 0 {return false}}return true}var wg sync.WaitGroupwg.Add(3)intChan := make(chan int, 1000)      // 创建一个缓冲大小为1000的整数型通道primeChan := make(chan int, 2000000) // 创建一个缓冲大小为2000000的整数型通道go InputIntChan(intChan, &wg) // 启动写入整数的协程go PrimeCompute(intChan, primeChan, &wg) // 启动计算素数并写入素数通道的协程go readIntChan(primeChan, &wg) // 启动读取素数并输出的协程wg.Wait() // 等待所有协程结束}// 判断一个整数是否为素数func isPrime(n int) bool {if n return false}for i := 2; i  // 只需遍历到sqrt(n)即可,减少计算量if n%i == 0 {return false}}return true}// 往通道中写入整数func InputIntChan(intChan chanfor i := 0; i  // 写入200000个整数intChan for i := range intChan { // 循环判断每个整数是否为素数if isPrime(i) {primeChan for i := range primeChan { // 循环读取素数通道中的素数fmt.Println("从通道中读取素数==" + strconv.Itoa(i))}wg.Done() // 协程结束,减少计数器}

上一篇:机房服务器录像怎么设置?

下一篇:QMGV视频下载攻略,一键掌握高效下载技巧!