题目描述
用筛法求之N内的素数。
输入
N
输出
0~N的素数
样例输入
100
样例输出
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
设计思路:
筛法:去掉所有素数的倍数,剩下的就是素数。
代码:
#include<stdio.h>
void primeset(bool a[],int n)
{
int i,j;
for(i=0;i<n;i++)
a[i]=true;//全部初始化为true
a[0]=false;
a[1]=false;
a[2]=true;
for(i=2;i<n;i++)
{
if(a[i])//如果a[i]是素数
{
for(j=2*i;j<n;j+=i)
{
a[j]=false;
}//筛选掉条件范围内的所有该素数的倍数
}
}
}//筛法函数
int main()
{
int n,i;
scanf("%d",&n);
bool a[n];
primeset(a,n);
for(i=2;i<n;i++)
{
if(a[i])
printf("%d\n",i);
}
return 0;
}