函数功能为:找出m后面相邻K个素数,并放进数组xx【】中
代码:
运行结果:
第一次发布,感谢各位大神!谢谢您!
因为你在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;
}
27也不是素数啊,整个判断逻辑不对吧