[英]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.