这里有一个简单的实施的埃拉托西内斯筛在里面C。它找到从2到PRIME_MAX-1的所有素数并打印出来。此实现采用尚未筛选的最小已知素数“currprime”,并从数组中删除所有小于prime_MAX的倍数。一旦currprime的平方大于或等于PRIME_MAX,它就会停止。如上所述,我们可以从currprime的平方开始,因为所有较小的倍数都已被删除。
该程序使用字符数组s保存从0到PRIME_MAX-1的每个数字的素数。如果索引是质数,则每个字符保持1,否则保持0。由于只需要一点点存储空间,因此将素数存储在一个字符中是浪费,但会大大简化代码。
#包括<stdio.h>
#定义PRIME_MAX 100
炭筛[PRIME_MAX];
int nextPrime(int lastprime){
整数i;
for(i=lastprime+1;i<PRIME_MAX;i++)
if(筛[i]==1)
返回i;
返回0;
}
整型main(){
int i,currprime;
筛[0]=0;
筛[1]=0;
对于(i=2;i<PRIME_MAX;i++)
筛[i]=1;
currprime=nextPrime(0);
而((currprime*currprime)<PRIME_MAX){
对于(i=(currprime*currprice);i<PRIME_MAX;i+=当前值)
筛[i]=0;
currprime=nextPrime(currprice);
}
对于(i=0;i<PRIME_MAX;i++)
if(筛[i]==1)
printf(“%d\n”,i);
返回0;
}