寻找素数,遍历 判断余数为0时出错,明明能整除2,却会推到后面的数才判断出

函数功能为:找出m后面相邻K个素数,并放进数组xx【】中
代码:
图片说明

运行结果:
图片说明

第一次发布,感谢各位大神!谢谢您!

2个回答

因为你在temp++的同时也执行了j++,意思就是如果遇到了连续的合数,第一个合数是从2开始检测的,第二个是从3开始,第三个是从4开始。
因为在执行continue时,是进入到了for(j=2; j<temp; j++)的下一次循环,而continue前后执行的代码就变成了

temp++;
continue;
j++;

temp++意味着开始判断下一个数是否是质数,
j++意味着要从这次判断的最后一个质因数的下一个质因数开始检测下一个数。
你可以思考下为什么27被看成了质数,按照上面的逻辑,27的质因数是从13后面的14开始的,自然都不是因数,也就被判定成质数了。
运行逻辑还需要斟酌,可以参考下面的代码。

int fun(int m, int k, int xx[]){
    //统计质数个数,保证xx数据排列紧凑
    int index = 0;
    for( int i = 0; i < k; i++ ){
        int temp = m + i + 1; 
        bool isPrime = true;

        for( int j = 2; j < temp; j++ ){
            if( temp % j == 0 ){
                isPrime = false;
                //用break直接跳出判断质因数的for,因为此时已经断定不是质数了
                //j==temp-1的情况等于循环的最后一个情况,用这个判断break和不判断没区别
                break;
            }
        }
        //用下标index存质数,而不是i
        if( isPrime )
            xx[index++] = temp;
    }
    return index;
}
qq_41653273
qq_41653273 对continue的理解出错了,感谢!!
6 个月之前 回复

27也不是素数啊,整个判断逻辑不对吧

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问