埃拉托色尼筛选法
下面求1-100的所有素数
Codes 1:
#include <stdio.h>
#include <memory.h>
#define true 1
#define false 0
int main()
{
int i,j,prime[101];
for(i=0; i<=100; i++)
prime[i]=i;
memset(prime,true,sizeof(prime));//函数原型memset(void *s,int ch,size_t n);头文件<memory.h>&<string.h>
prime[0]=prime[1]=false;
for(i=2; i<=100; i++)
{
if(prime[i])
for(j=2*i; j<=100; j+=i)
prime[j]=false;
}
for(i=1; i<=100; i++)
if(prime[i])
printf("%d ",i);
return 0;
}
Codes 2:
//C语言中0为假,非0为真
#include <stdio.h>
#define N 10000
int main()
{
int i ,j,a[N],count=0;
for(i=2; i<N; i++) a[i]=1;//全部位置为真
for(i=2; i<N; i++)
if(a[i])
for(j=2*i; j<N; j+=i) a[j]=0;//合数位置为假
for(i=2; i<N; i++)
if(a[i])
{
printf("%d ",i);//输出所有素数
count++;
}
printf("%d",count);//输出素数个数
return 0;
}