首页 > 其他分享 >Go 语言代码示例。使用并发和通道的并行计算素数的示例代码

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

时间:2023-10-03 17:00:51浏览次数:43  
标签:协程 示例 代码 并行计算 素数 primes upperLimit

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

相关文章

  • c语言代码练习5
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>intmain(){inti=0;charpassword[20]={0};for(i=0;i<3;i++){printf("请输入您的密码,今天是你第%d次输入:",i+1);scanf("%s&quo......
  • c语言代码练习4(改进)
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>intmain(){/*呈现效果*################*a##############!*ay############!!*......*ayuex......
  • c语言代码练习4
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>intmain(){/*呈现效果*################*a##############!*ay############!!*......*ayuexuexiC!!!!*/intx=0;inty=0;......
  • 【Citrix篇】1-Citrix ADC/Gateway 远程代码执行漏洞CVE-2023-3519和升级方法
    一、前言近期我们收到Citrix发布关于NetScalerADC、NetScalerGateway的风险通告,漏洞编号为CVE-2023-3519,漏洞等级:严重,漏洞评分:9.8漏洞影响:Hack可根据该漏洞,在配置了网关(VPN虚拟服务器、ICA代理、CVPN、RDP代理)或AAA虚拟服务器的Netscaler上可绕开任何认证直接进入到shell......
  • c语言代码练习3改进
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){intx=0;printf("请输入一个整数:");scanf("%d",&x);intarr[]={1,2,3,4,5,6,7,8,9};inta=sizeof(arr)/sizeof(arr[0]);//计算元素个数intl......
  • c语言代码练习2(2)
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){inti=1;intnum=1;intx=0;intsum=0;for(x=1;x<=10;x++){num=1;for(i=1;i<=x;i++){num=n......
  • c语言代码练习1
    #计算n的阶乘可以使用for循环,也可使用while循环#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){//定义变量 inti=1; intnum=1; intx=0; printf("请输入你要输入的一个整数:"); scanf("%d",&x); while(i<=x) { num*=i; i++;......
  • c语言代码练习2(2)改进
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){intnum=1;intx=0;intsum=0;for(x=1;x<=10;x++){num=num*x;sum+=num;}printf("for循环,1-10阶乘的和是%d",su......
  • c语言代码练习2(1)
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){inti=1;intnum=1;intx=0;intsum=0;for(x=1;x<=10;x++){while(i<=x){num=num*i;i++;......
  • 仿Hexdump的代码
    编码过程中我们有时候需要将数据的十六进制值打出来看看,这里做一下记录#include<stdio.h>#include<ctype.h>#include<unistd.h>voidpretty_print(uint8_t*ret,size_tsize){for(size_ti=0;i<size;i++){size_tc=i;printf("%08zx......