Go 语言中如何找到第 n 个回文素数
在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天编程网就整理分享《Go 语言中如何找到第 n 个回文素数》,聊聊,希望可以帮助到正在努力赚钱的你。
问题内容我对 go 有点陌生,我试图找到第 n 个素数回文数,但它总是返回 0,我在这里做错了什么,我的代码的输出应该是 131。
为了清楚起见,下面我将给出 n 的示例及其返回值。
n:1,输出:2
n:2,输出:3
n:3,输出:5
n:5,输出:11
n:6,输出:101
n:7,输出:111
n:8,输出:151
n := 7
counter := 0
currNum := 1
palindromeNumber := 0
for 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 个因数的数字:1 和它们本身,这意味着如果数字 n
是质数,则它不能被 2
到 sqrt(n)
范围内的任何数字整除。但在你的代码中,我看到
if currNum%i == 0 {
isPrime = true
...
}
如果 currnum
能被 i
整除,且 i 的范围在 2
到 sqrt(n)
之间,那么为什么 currnum
是素数?这是不对的。如果 currnum
满足此条件,则它必须是非素数。
此外,我没有看到 var number
的分配,因此它的零值 0
也会使 palindromenumber = 0
。
我认为您应该将素数检查和回文检查保留在两个单独的函数中,以避免代码中出现混淆(例如 func isprime
和 func ispalindrome
)。
您的主要问题是变量 数量。您创建了它,也许您想在使用 number 计算还原之前将 currnum 复制到 number 中,但您没有这样做。
以上就是《Go 语言中如何找到第 n 个回文素数》的详细内容,更多关于的资料请关注编程网公众号!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341