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

How to find nth prime palindrome in Go

我是 Go 的新手,我试图找到第 n 个回文素数,但它总是 return 0,我在这里做错了什么,我的代码输出应该是 131。

为了清楚起见,下面给出n及其return的样本。

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)

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

素数是只有两个因数的数字:1 和它们本身,这意味着如果一个数字 n 是一个素数,它不会被 [=12= 范围内的任何数字整除] 到 sqrt(n)。但是在你的代码中,我看到

if currNum%i == 0 {
        isPrime = true
        ...
}

为什么 currNum 可以被 i 整除且 i 在 2sqrt(n) 范围内?这是错的。如果 currNum 满足这个条件,它必须是一个 non-prime 数字。 此外,我没有看到 var number 的赋值,因此它的零值 0 也会使 palindromeNumber = 0.

我认为您应该将素数检查和回文检查放在两个单独的函数中以避免代码混淆(例如 func isPrimefunc isPalindrome)。