鍍金池/ 問答/C++/ 求一個大於n的最小質(zhì)數(shù)出現(xiàn)問題

求一個大於n的最小質(zhì)數(shù)出現(xiàn)問題

Q.如題,我想要求一個大於n的最小質(zhì)數(shù),但最後為什麼出來的答案不如預(yù)期呢?

以下是代碼:

int NextPrime(int n) {

bool notPrime = true;
int j;
int i;
while (notPrime) {
    i = n + 1; i++;
        for ( j = 2; j <= i; j++) {
            if (i%j == 0) {    break;};
            return i;
        notPrime = false;
        }
    }    
}

int main()
{

    cout << NextPrime(7) << " ";

return 0;

}


獲得結(jié)果:
9
但是9不是質(zhì)數(shù)阿...請大神解惑!

回答
編輯回答
互擼娃

因為你的代碼寫的幾乎沒一個地方是對的。

想要找出大于n的質(zhì)數(shù),從n+1循環(huán)遍歷到n+m,以及判斷n+m是否是質(zhì)數(shù)。

首先第一個

i = n + 1; i++;

i = n + 2

有什么區(qū)別,假設(shè)我這里輸入的是12,13就直接給你跳過了。所以,i++應(yīng)該放在while循環(huán)的最后,而且,i = n + 1應(yīng)該while循環(huán)的外面,要不是你的判斷寫的有問題,就直接死循環(huán)了。

以及你這里notPrime是什么意思,在這里完全沒有意義。

之后就是return i,只要任意i%j != 0,你就直接return i了。所以綜合上面的i = n + 2,你這里才會直接輸出9

int nextPrime(int n) {
    int i,j;
    i = n;
    while(true){
        i++;
        for(j=2; j<=i; j++){
            if(i==j){
                return i;
            }
            if(i%j==0){
                break;
            }
        }
    }
}
2017年6月2日 13:30