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(协程)和通道实现了在指定范围内生成和打印素数的功能。注意,为了简化示例,我没有包含任何错误处理或并发安全性。在实际项目中,这些都是需要考虑的因素。希望这个示例能对您有所帮助!如果您有任何其他问题,我会很乐意回答。
标签:协程,示例,代码,并行计算,素数,primes,upperLimit From: https://blog.51cto.com/u_16004326/7693982