我是 Go 的新手,我试图找到第 n 个回文素数,但它总是返回 0,我在这里做错了什么,我的代码输出应该是 131。为了清楚起见,下面我将给出 n 的样本及其返回值。n:1,输出:2n:2,输出:3n:3,输出:5n:5,输出:11n:6,输出:101n:7,输出:111n:8,输出:151n := 7counter := 0currNum := 1palindromeNumber := 0for counter < int(n) { currNum++ isPrime := false for i := 2; i <= int(math.Sqrt(float64(currNum))); i++ { if currNum%i == 0 { isPrime = true var number, remainder, temp int var reverse int = 0 temp = currNum // For Loop used in format of While Loop for { remainder = number % 10 reverse = reverse*10 + remainder number /= 10 if number == 0 { // Break Statement used to exit from loop break } } if temp == reverse { palindromeNumber = reverse } break } } if !isPrime { counter++ }}return int64(palindromeNumber)
2 回答
智慧大石
TA贡献1946条经验 获得超3个赞
质数是只有 2 个因数的数:1 和它们本身,这意味着如果一个数是质数,则它不能被从到n范围内的任何数整除。但是在你的代码中,我看到2sqrt(n)
if currNum%i == 0 {
isPrime = true
...
}
如果在从到的范围内可以被 icurrNum整除,为什么它是素数?这是错的。如果满足这个条件,它必须是一个非素数。此外,我没有看到 的赋值,因此它的零值也会使。i2sqrt(n)currNumvar number0palindromeNumber = 0
我认为您应该将素数检查和回文检查保留在两个单独的函数中,以避免代码中出现混淆(例如func isPrime和func isPalindrome)。
- 2 回答
- 0 关注
- 96 浏览
添加回答
举报
0/150
提交
取消