素数表的获取,埃氏筛法 介绍(复杂度 : O(n*loglogn) )

该算法时间复杂度为: O(n*loglogn)

当 n = 1e6 时 , 复杂度约为  7.7 * 10^5 ,优于O( n )

//素数线性筛法,复杂度:O(nloglogn) 
//求100以内素数 
#include<iostream>
#include<cstring>
#include<string>

using namespace std;
bool vis[101];//标记是否为素数 
int prime[101];//储存素数 

int main()
{
	int n,m,j,k,i,T,t=0;
	memset(vis,true,sizeof(vis));//初始化,都默认为素数 
	for (i=2;i<100;i++)
	{
		if (vis[i]==true)//如果是素数 
		{
			prime[t++] = i;//把素数i储存进去 
			
			for (j=i+i;j<100;j+=i)//枚举素数i的倍数,然后标记为非素数 
			vis[j] = false;//标记为非素数 
		}
		
	}	
	for (i=0;i<t;i++)
	cout<<prime[i]<<endl;//打印答案 
	
	return 0;
}

 

posted @ 2019-01-12 16:05  RomanticChopin  阅读(554)  评论(0编辑  收藏  举报
-->
Live2D