我是 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 關注
- 112 瀏覽
添加回答
舉報
0/150
提交
取消