素数打表
直接上代码
简洁明了
#include<bits/stdc++.h>
#define N 10000
using namespace std;
bool prime[N]; // 判断素数
int pri[N]; //保存素数
int h=0;
void build_list()
{
memset(prime,true,sizeof(prime)); //初始化假设所有的数都为素数
prime[1]=false; //排除1
for(int i=2;i<N;i++)
{
if(prime[i])
{
pri[h++]=i;//如果一个数为素数,保存
}
for(int j=0;j<h&&i*pri[j]<N;j++)
{
prime[i*pri[j]]=false; //一个素数乘任意一个正数都为非素数
if(i%pri[j]==0)
break; //防止重复操作
}
}
}
int main()
{
build_list(); //打表
int n;
scanf("%d",&n);
for(int i=1;i<n;i++)
{
if(prime[i])
printf("%d ",i); //输出n以前的素数
}
return 0;
}