繁体   English   中英

NthPrime-while / for循环或if语句集有什么问题?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM