从2开始枚举所有数(已知2为素数),筛去每一个素数的倍数,剩下的就都是素数。
#include <cstdio>
const int maxn = 1001;
bool p[maxn] = {false};
int prime[maxn],pNum = 0;
void find_prime(int n)
{ int i,j;
for(i = 2;i < n;i++) //2为素数,已初始化,从2开始
{
if(p[i] == false){
prime[pNum++] = i;//写入素数表
for(j = i+i;j < n;j += i)
{
p[j]=true; //若i为素数,将该范围内的所有i的倍数标记为合数
}
}
}
}
int main()
{
int n,i;
scanf("%d",&n);
find_prime(n);
for(i = 0;i < pNum; i++)
{
printf("%d ",prime[i]);
}
return 0;
}