求一個大於n的最小質數出現問題

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

以下是代碼:

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;

}


獲得結果:
9
但是9不是質數阿...請大神解惑!

阅读 3.6k
1 个回答

因为你的代码写的几乎没一个地方是对的。

想要找出大于n的质数,从n+1循环遍历到n+m,以及判断n+m是否是质数。

首先第一个

i = n + 1; i++;

i = n + 2

有什么区别,假设我这里输入的是12,13就直接给你跳过了。所以,i++应该放在while循环的最后,而且,i = n + 1应该while循环的外面,要不是你的判断写的有问题,就直接死循环了。

以及你这里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;
            }
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题