筛法思想:标记出所有的非质数,输出所有没被标记的数字。
对于n以内的筛选,如果n是合数,成为n的最小正因数,则有1≤c≤ ⇒1≤ ≤n
eg:输出 15 以内大于 1 的所有质数
#include <stdio.h>
int main() {
int n = 15;//既可以看作是长度又可以看作范围(0-15)
int mark[16] = {//将0-15中的0和1看作为1,其余是0
1, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0
};
int c;
int j;
for (c = 2; c * c <= n; c++) {//2为最小质数,所以从2开始
if(mark[c]!=1){//mark[c]对应的值不为1(即合数)
for(j=2;j<=n/c;j++){
mark[c*j]=1;//标记为合数
}
}
}
for(c=2;c<=n;c++){
if(mark[c]!=1){
printf("%d\n",c);
}
}
return 0;
}