没有分析几种模板的效率,先记下一个用着吧
#include<stdio.h>
#include<string.h>
#define MAXX 1000//求MAXX范围内的素数
int prime[MAXX+5],len=0;
int p[MAXX+5];//p设为bool型较为合适,但int结果也对,注意把p数组加大一点防止越界
//思想:将范围内的合数全部筛掉剩余的就是素数
//而每个合数都可以表示为素数的倍数
void isp()
{
memset(p,1,sizeof(p));//初始都当作素数,这里的1对于int型来说并不是1(bool型才是1)
p[0]=0;p[1]=0;
for(int i=0;i<=MAXX;i++)
{
if(p[i])//经过前面的筛选,没有被筛选掉就是素数
{
for(int j=i;i*j<=MAXX;j++)//i之前的已由上几次循环处理过了
{
p[i*j]=0;//素数的倍数即是合数,筛掉
}
prime[len++]=i;//记录素数
}
}
}
int main()
{
isp();
for(int i=0;i<len;i++)
{
printf("%d ",prime[i]);
}
return 0;
}