Go 语言代码示例。使用并发和通道的并行计算素数的示例代码
  97gLn4tc0S9W 2023年11月13日 29 0

Go 语言代码示例。使用并发和通道的并行计算素数的示例代码:

package main

import (
	"fmt"
)

func main() {
	lowerLimit := 2
	upperLimit := 100

	// 创建管道,用于在协程之间传递素数
	primes := make(chan int)

	// 创建一个协程来生成素数序列
	go generatePrimes(primes)

	// 打印出指定范围内的素数
	printPrimes(primes, lowerLimit, upperLimit)
}

// generatePrimes 生成素数序列并将它们发送到管道中
func generatePrimes(primes chan<- int) {
	primes <- 2 // 2 是第一个素数

	// 从 3 开始,每次递增 2,因为偶数不是素数
	for num := 3; ; num += 2 {
		if isPrime(num) {
			primes <- num
		}
	}
}

// isPrime 检查一个数是否为素数
func isPrime(num int) bool {
	// 只需检查从 2 到 num 的平方根之间的数是否能整除 num
	for i := 2; i*i <= num; i++ {
		if num%i == 0 {
			return false
		}
	}
	return true
}

// printPrimes 从管道中读取并打印指定范围内的素数
func printPrimes(primes <-chan int, lowerLimit int, upperLimit int) {
	count := 0
	for prime := range primes {
		if prime < lowerLimit {
			continue
		}
		if prime > upperLimit {
			break
		}
		count++
		fmt.Println(prime)
	}
	fmt.Printf("在范围 [%d, %d] 内找到了 %d 个素数\n", lowerLimit, upperLimit, count)
}

这个代码示例使用 Goroutine(协程)和通道实现了在指定范围内生成和打印素数的功能。注意,为了简化示例,我没有包含任何错误处理或并发安全性。在实际项目中,这些都是需要考虑的因素。希望这个示例能对您有所帮助!如果您有任何其他问题,我会很乐意回答。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

97gLn4tc0S9W
作者其他文章 更多

2023-11-02