线筛

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
bool b[1000010];
int prime[100010],point;
int n;
int main()
{
	scanf("%d",&n);
	b[0]=b[1]=1;
	for(int i=2;i<=n;i++)
	{
		if(!b[i])
		prime[++point]=i;	
		for(int j=1;j<=point;j++)
		{
			if(i*prime[j]>n)break;
			b[i*prime[j]]=1;
			if(i%prime[j]==0)break;//如果i是prime[j]的倍数,那么在筛i时已经筛过prime[j]的倍数了,所以跳出 
		}
	}
	for(int i=1;i<=point;i++)printf("%d ",prime[i]);	
} 

  

posted @ 2018-04-11 21:50  _ZZH  阅读(122)  评论(0编辑  收藏  举报