Eratosthenes算法
假设有一个筛子,用来存放2~N,例如:
2、3、4、5、6、7、8、9、10、11……N
由于偶数都能被2整除,因此偶数都不是素数(2除外),那么将这些数筛去,得到:
2、3、5、7、9、11……N
接着再将3的倍数筛去,得到:
2、3、5、7、11……N
接下来再将5、7、11、……的倍数筛去,到最后留下来的就都是素数了
代码
#include<stdio.h>
#define MaxNum 10000
int main(){
int i,j;
int prime[MaxNum+1];
for(i=2;i<=MaxNum;i++)
prime[i]=1;
for(i=2;i*i<=MaxNum;i++){
if(prime[i]==1){
for(j=2*i;j<=MaxNum;j++){
if(j%i==0) prime[j]=0;
}
}
}
int c=0;
for(i=2;i<=MaxNum;i++){
if(prime[i]==1){
printf("%4d ",i);
c++;
if(c%5==0) printf("\n");
}
}
return 0;
}