素数表的获取,埃氏筛法 介绍(复杂度 : 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;
}