翁恺c语言习题集提问

有人能解释一下这个素数表的代码吗?

#include 

int main(){
    const int maxnumber=25;  //数组的大小 
    int isprime[maxnumber];  //定义数组 
    int i;
    int x;
    for(i=0;i1;
    }
    for(x=2;xif(isprime[x]){
            for(i=2;i*x0;
            }
        }
    }
    for(i=2;iif(isprime[i]){
            printf("%d\t",i);
        }
    }
    printf("\n");
    return 0;
}

输出是这样的

img

这段代码的前面不是定义了一个长度为25的数组吗?为什么不是输入前25位的素数而是输出了25之前的素质?

我来为题主解答一下。
这里面用的是筛法,不懂可以百度。
我只解释代码部分:
首先定义一个数组,长度为25,下标是0-24,表示0-24这几个数字,也就是25以内的自然数。
先把所有的数字状态标记为是素数!
因为2是最小的素数,所以从2开始遍历即可,后面处理的时候也从2开始识别。
遍历的过程中,对于每一个数,只要它是素数,那么它的倍数都不是素数,标记为非素数的状态。
最后扫描一遍,还有素数标记的数字输出即可。
开始定义的数组,本就是筛选的数值范围,而不是素数的个数!
如果我的回答对你有帮助,还望采纳!

筛法,先假设所有数字为质数,则质数的倍数一定不是质数,然后逐一筛去