素数是求出来了但是结果后面还多出了一串其他数字是怎么回事

 

有两个原因可能导致结尾出现一串其他数字,一是数组下标100越界,超过了数组的最大下标99,访问了其他内存位置的数据;然后判断是否为素数的函数judge()的实现,没有对参数检查是否小于2,如果这个越界的位置的数据小于2,则可能会被认定为素数,所以就可能出现如图片中一个负数被判断为素数,根据这两点修改如下:

参考链接:

#include <stdio.h>

int judge(int * p){
    
    // https://baike.baidu.com/item/%E8%B4%A8%E6%95%B0/263515
    if(*p<2){ // 小于2的其他数字不是素数 
        return 0;
    }
    
    int i;
    int prime=1;
    for(i=2;i<*p;i++){
        if(*p%i==0){
            prime=0;
            break;
        }
    }
    
    if(prime==1){
        return 1;
    }
    
    return 0;
    
}


int main(void){
    
    int i;
    int a[100];
    for(i=0;i<100;i++){
        a[i]=i+1;
    }
    
    for(i=0;i<100;i++){ // 数组最大下标为99 
        if(judge(&a[i])){
            printf("%d是素数",a[i]);
        }
    }
}

img