如何在 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)


小怪兽爱吃肉
浏览 77回答 2
2回答

智慧大石

质数是只有 2 个因数的数:1 和它们本身,这意味着如果一个数是质数,则它不能被从到n范围内的任何数整除。但是在你的代码中,我看到2sqrt(n)if currNum%i == 0 {&nbsp; &nbsp; &nbsp; &nbsp; isPrime = true&nbsp; &nbsp; &nbsp; &nbsp; ...}如果在从到的范围内可以被 icurrNum整除,为什么它是素数?这是错的。如果满足这个条件,它必须是一个非素数。此外,我没有看到 的赋值,因此它的零值也会使。i2sqrt(n)currNumvar number0palindromeNumber = 0我认为您应该将素数检查和回文检查保留在两个单独的函数中,以避免代码中出现混淆(例如func isPrime和func isPalindrome)。

catspeake

您的主要问题是变量number。你创建了它,也许你想在使用数字计算还原之前将 currNum 复制到数字中,但你没有这样做。
打开App,查看更多内容
随时随地看视频慕课网APP