基于数组,利用筛选法计算1000以内素数的个数。
所谓的筛选法,是用某一元素作为筛子,去除它的倍数。
本题的思路:
(1)构造数组,内存储0或1,表示该数字是素数或不是素数。
可以将数组中所有元素初始化为1,同时将前两个元素初始化为0(数字0和1不是素数)。
从数字2开始,如果对应数组中元素为1,
构造筛子,向后过滤到它的倍数;
如果对应数组中元素为0,则没有构造筛子的资格。
最后数组中元素为1的下标即为素数。
#include<stdio.h>
#include<string.h>
int main()
{
int prime[1001],x[1001],k=0;
memset(prime,0,sizeof(prime));
memset(x,0,sizeof(x));
int sum=0;
for(int i=2;i<1001;i++)
{
if(x[i]==0)
{
prime[k++]=i;
for(int j=2*i;j<1001;j+=i)
{
x[j]=2;
}
x[i]=1;
sum+=i;
}
}
printf("%d %d\n",k,sum);
return 0;
}