埃拉托色尼筛选法:
任给一个整数N,筛选出一切不超过N的所有素数:
把不超过N的一切正整数按大小关系排成一串:
1 ,2 ,3, 4, .......,N
首先划去1,第一个留下的是 2,它是一个质数:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,....N
然后,从2开始每隔一位 划去一数,即划掉2的倍数;剩下:
2 ,3, 5, 7, 9,...N
第一个留下未被划去的是3,然后从3开始,继续划掉3的倍数,结果:
2, 3, 5, 7,....N
第一个留下未被划去的是5,它是一个质数,继续从5开始往后依次划掉5的倍数:
....................................................................................................................
一直处理到N,最后剩下的就是质数。
代码:
void is_prime(int n){
memset(prime, 1,sizeof(prime));
prime[1]=0;
for(i=2;i<=n;++i){
if(prime[i]){
for(j=i*i;j<=n;j+=i) prime[ j] =0;
}
}
}