求数组中的素数个数问题。

img


为什么这个程序输入2的时候也判断为素数?j的循环初始值为2,能把2整除,flag变为1,不就判断为不是素数了吗?

因为判断2时,不会进入第16行那个for循环,因为2<2这个for循环条件不满足,所以不会进入for循环内,然后2就被判断为素数(可以在此for循环内打印每一次a[i]的数值观察下)。

然后根据定义,2是素数。

测试代码如下:

参考链接:


https://baijiahao.baidu.com/s?id=1711778710393832660&wfr=spider&for=pc

https://baike.baidu.com/item/%E8%B4%A8%E6%95%B0/263515



#include <stdio.h>

int main(void){
    
    int a[10];
    float sum;
    int i,j,k,b=0;
    
    for(k=0;k<10;k++){
        scanf("%d",&a[k]);
    }
    
    for(i=0;i<10;i++){
        
        int flag=0;  //素数标志,默认0表示是素数 
        
        if(a[i]<2){
            flag=1;
        }
        
        for(j=2;j<a[i];j++){  // 当a[i]等于2时,这个for循环不会进入循环, 所以2被判断为是素数 
//            if(j==2){
//                printf("a[%d]=%d\n",i,a[i]);
//            }
            sum=a[i]%j;
            if(sum==0){
                flag=1;
                break;
            }
        }
        
        if(!flag){    
            b++;
        //    printf("%d: a[%d]=%d\n",b,i,a[i]); 
        }
    }
    
    printf("%d",b);
    
    return 0;
} 

img

因为你i初始时是2,2不小于a [i]。进不了循环