qq_41653273 2019-08-20 21:34 采纳率: 33.3%
浏览 291
已采纳

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

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

运行结果:
图片说明

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

  • 写回答

2条回答 默认 最新

  • JonathanYan 2019-08-20 23:37
    关注

    因为你在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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?