塞法输出指定范围内的质数
用一个数组将所求范围内所有的质数和非质数进行标记并输出,初始数组为0,将所有的非质数标记为1。
#include <stdio.h>
#include <string.h>
int n = 1000000;
int mark[1000001];
int main() {
int c,N,M,j;//N和M为指定输出的质数范围
memset(mark, 0, sizeof(mark));//对数组进行清零的函数
mark[0] = 1;//0和1直接标记为1
mark[1] = 1;
scanf("%d %d",&N,&M);
for (c = 2; c * c <= N; c++) {//循环标记
if(mark[c] != 1){
for(j=2; j <= n/c; j++){//用倍乘的方式进行标记
mark[ c * j ] = 1;
}
}
}
for(c = M; c<=N; c++){//将未标记的数输出,即输出质数
if(mark[c] != 1){
printf("%d\n",c);
}
}
return 0;
}