当前位置: 首页 > news >正文

跨境网站开发公司山东最新资讯

跨境网站开发公司,山东最新资讯,做期货应关注什么网站,自己做网站需要备案么题目 使用 Go 语言统计 0-200000的数字中,哪些是素数? 思路 两种方法: 单循环遍历 1-200000 数字,并判断是否是素数。 使用了 Goroutine 和通道实现并发: 通过创建两个通道 intChan 和 primeChan,以及一…

题目

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

思路

两种方法:

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

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

    • 通过创建两个通道 intChanprimeChan,以及一个 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 <= 200000; i++ { // 判断从0到200000的整数是否为素数if isPrime(i) { // 如果是素数primeChan <- i // 写入素数通道}}end := time.Now().Unix() // 记录结束时间fmt.Println("总耗时时间:", end-start) // 输出总耗时时间
}// 判断一个整数是否为素数
func isPrime(n int) bool {if n <= 1 {return false}for i := 2; i <= int(math.Sqrt(float64(n))); i++ { // 只需遍历到sqrt(n)即可,减少计算量if n%i == 0 {return false}}return true
}

Goroutine 和通道实现

好的,以下是给代码加上注释后的版本:

package mainimport ("fmt""math""strconv""sync"
)func main() {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 <= 1 {return false}for i := 2; i <= int(math.Sqrt(float64(n))); i++ { // 只需遍历到sqrt(n)即可,减少计算量if n%i == 0 {return false}}return true
}// 往通道中写入整数
func InputIntChan(intChan chan<- int, wg *sync.WaitGroup) {for i := 0; i <= 200000; i++ { // 写入200000个整数intChan <- i // 写入整数通道fmt.Println("写入Int通道==" + strconv.Itoa(i))}close(intChan) // 写入完成,关闭通道wg.Done()      // 协程结束,减少计数器
}// 判断整数是否为素数,并往素数通道中写入素数
func PrimeCompute(intChan <-chan int, primeChan chan<- int, wg *sync.WaitGroup) {for i := range intChan { // 循环判断每个整数是否为素数if isPrime(i) {primeChan <- i // 如果是素数,往素数通道中写入素数}}close(primeChan) // 计算完毕,关闭素数通道wg.Done()        // 协程结束,减少计数器
}// 从素数通道中读取素数并输出
func readIntChan(primeChan <-chan int, wg *sync.WaitGroup) {for i := range primeChan { // 循环读取素数通道中的素数fmt.Println("从通道中读取素数==" + strconv.Itoa(i))}wg.Done() // 协程结束,减少计数器
}

优化思路

创造多个协程处理写入读取通道

http://www.hkea.cn/news/96173/

相关文章:

  • 贵阳疫情最新消息站内seo优化
  • wordpress相关问题深圳百度关键字优化
  • 做国珍新时代 网站陕西seo顾问服务
  • 建立网站怎么做关键字搜索引擎营销的作用
  • 广州手机网站建设宁波seo优化费用
  • 怎么设置网站服务器宁德市教育局官网
  • 查看网站源代码建站可以牛排seo系统
  • 政府网站建设的基本原则百度网盘电脑版
  • 张家港网站建设福州百度快速优化
  • 兼职做网站编辑百度搜索推广开户
  • 谁告诉你j2ee是做网站的宁波网站推广找哪家公司
  • 谷歌外贸建站多少钱搭建网站教程
  • 赚钱靠普的网站关键字搜索软件
  • 建设银行深分行圳招聘网站做游戏推广一个月能拿多少钱
  • 北京网站建设及推广招聘关键词排名代做
  • 对网站建设的意见建议网络营销推广的方法有哪些
  • 爬虫网站怎么做怎样才能在百度上面做广告宣传
  • 网站页码南昌做seo的公司有哪些
  • 网络设计方案包括哪些深圳百度推广seo公司
  • 亚马逊跨境电商开店站长工具seo综合查询5g
  • 网站怎么做百度快照logo百度快照优化推广
  • 山西网站建设排名seo技术培训山东
  • 日韩系成人影片成首选网站如何优化推广
  • 网站到期续费通知搜索风云排行榜
  • 网站公司说我们做的网站服务器不够用哪个杭州seo好
  • 类似淘宝网站建设费用杭州哪家seo公司好
  • 装修网站怎样做seo专员很难吗
  • 无锡网站外包如何接广告赚钱
  • 英文网站制作 官网淘宝标题优化网站
  • 电力建设网站网络推广网站的方法