[英]NthPrime- what's wrong with this while/for loop or set of if-statements?
無法理解代碼中的錯誤。
我還嘗試盡可能避免使用多種方法,而只是將功能保留在while循環中。
public class NthPrime {
public static void main(String[] args) {
int n;
System.out.println("Which nth prime number do you want?");
n = IO.readInt();
if(n <= 0) {
IO.reportBadInput();
return;
}
if(n == 1) {
System.out.println("Nth prime number is: 2");
return;
}
int primeCounter = 1;
int currentNum = 3;
int primeVal = 0;
while(primeCounter < n) {
for(int x = 2; x < currentNum; x++) {
if(currentNum % x == 0) {
continue;
} else {
primeVal = currentNum;
primeCounter++;
}
}
currentNum++;
}
System.out.println(primeVal);
}
}
您的代碼假定每次遇到要檢查的數字的互質數時,它都有一個質數。 也就是說,您的if塊:
if(currentNum % x == 0) {
continue;
} else {
primeVal = currentNum;
primeCounter++;
}
說:“如果它是合成的(即,被x
整除),則沒有必要繼續測試該數字。 但是 ,如果它不是合成的,那么我們就有質數!” 這是有問題的,因為如果在互質數上方有一個復合數,則您的代碼不在乎。
對於每個低於您要檢查的互質數的故障,該錯誤測試也會運行。
您可以通過將更新primeVal
並遞增primeCounter
的代碼primeVal
確定 currentNum
為質數的位置來解決此問題。 這將在for循環完成之后檢查currentNum
以下的所有數字。
一般提示:通過循環到currentNum
平方根(而不是currentNum
本身)來加速代碼。 它相當於您現在所擁有的,但是更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.