这是一般线性筛的算法是不是比较详细?希望指正哈
#include<stdio.h>
#include<stdbool.h>
#define maxn 1000010
int a[maxn];
int cnt;
bool vis[maxn];
void Init()
{
memset(vis,0,sizeof(vis));///初始化数组vis
int i,j;
cnt=0;
///0、1不是素数标记为1
vis[0]=1;
vis[1]=1;
///循环标记i的倍数
for(i=2;i<maxn;i++)
{
if(!vis[i])
{
a[cnt++]=i;///记录素数(输出结果要是输出想要素数改进一下)
///把j的倍数全部标记为1
for(j=i*2;j<maxn;j+=i)
vis[j]=1;
}
}
}
int main()
{
Init();
int n;
printf("%d\n",sizeof(bool));///bool值所占大小
///多组输入数字判断是否为素数
while(~scanf("%d",&n))
{
if(vis[n])
printf("NO\n");
else
printf("YES\n");
}
}