为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中找到第 n 个回文素数

如何在 Go 中找到第 n 个回文素数

Go
小怪兽爱吃肉 2022-12-05 17:29:24
我是 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)。


查看完整回答
反对 回复 2022-12-05
?
catspeake

TA贡献1111条经验 获得超0个赞

您的主要问题是变量number。你创建了它,也许你想在使用数字计算还原之前将 currNum 复制到数字中,但你没有这样做。



查看完整回答
反对 回复 2022-12-05
  • 2 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信