Golang中如何计算给定范围内的质数之和并解决回调函数问题

Golang中如何计算给定范围内的质数之和并解决回调函数问题

package main

import (
	"fmt"
)

func prime(x, y int) []int{
	z := []int{}
	for i := x; i < y; i++ {
		for j := 2; j < i; j++ {
			if i%j == 0 {
				break
			} else {
				z = append(z, i)
				break
			}
		}
	}
	return z
}
func sum(xi []int)int {
	sum := 0
	for _, v := range xi {
		sum += v
	}
	return sum
}
func main() {

	s := prime(10, 100)
	fmt.Println(s)
}

更多关于Golang中如何计算给定范围内的质数之和并解决回调函数问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

非常感谢

更多关于Golang中如何计算给定范围内的质数之和并解决回调函数问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我们能否将求和功能编写为独立的函数

根据用户 Curtis Allyn Green 发布的代码进行了编辑。https://play.golang.org/p/OkHWY9LeJ4O

我制作了一个关于如何在本论坛发布代码的小指南。这样能让代码更易于阅读。如何在本论坛发布代码

很好你把它放到了 Go Playground 上 😊 那段代码中的错误在于最后一个例子中调用 sum 时两个参数都是 10:sum(10, 10),而不是 sum(10, 100) 或类似的参数。

你的代码有几个问题,我来分析并提供修正版本。

问题分析

  1. 质数判断逻辑错误:你的质数检查算法不正确,会导致非质数被错误地包含在结果中
  2. 回调函数问题:你的代码中没有使用回调函数,但标题提到了这个问题

修正后的代码

package main

import (
	"fmt"
)

// 判断是否为质数的辅助函数
func isPrime(n int) bool {
	if n < 2 {
		return false
	}
	for i := 2; i*i <= n; i++ {
		if n%i == 0 {
			return false
		}
	}
	return true
}

// 获取范围内的质数切片
func prime(x, y int) []int {
	primes := []int{}
	for i := x; i < y; i++ {
		if isPrime(i) {
			primes = append(primes, i)
		}
	}
	return primes
}

// 计算切片元素之和
func sum(xi []int) int {
	sum := 0
	for _, v := range xi {
		sum += v
	}
	return sum
}

// 使用回调函数处理质数
func processPrimes(x, y int, callback func(int)) {
	for i := x; i < y; i++ {
		if isPrime(i) {
			callback(i)
		}
	}
}

func main() {
	// 方法1:直接计算质数和
	s := prime(10, 100)
	fmt.Printf("质数列表: %v\n", s)
	fmt.Printf("质数之和: %d\n", sum(s))

	// 方法2:使用回调函数
	total := 0
	processPrimes(10, 100, func(p int) {
		total += p
		fmt.Printf("发现质数: %d\n", p)
	})
	fmt.Printf("使用回调计算的质数之和: %d\n", total)
}

输出示例

质数列表: [11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97]
质数之和: 1043
发现质数: 11
发现质数: 13
...
发现质数: 97
使用回调计算的质数之和: 1043

关键改进

  1. 正确的质数判断:使用 isPrime() 函数,通过检查到 √n 来优化性能
  2. 回调函数实现processPrimes() 函数接受一个回调函数参数,对每个质数执行自定义操作
  3. 清晰的逻辑分离:将质数判断、质数收集和求和操作分离为独立函数

这个修正版本解决了质数计算的正确性问题,并展示了如何使用回调函数处理质数。

回到顶部