簡體   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