问题描述
求1到n(n > 1e5)之间的素数
分析
如果使用普通判断素数的方法时间复杂度是O(n√n),很明显是不能满足的,会出现超时,所以应该使用新的方法。
时间复杂度
O(nloglogn)
代码
#include <iostream>
using namespace std;
//表长
const int maxn = 101;
//表示是否被筛到 初始全部都没有被筛到
bool p[maxn] = {false};
//存放素数
int prime[maxn];
//素数个数
int count;
void find_prime()
{
for (int i = 2; i < maxn; i++)
{
if (p[i] == false)
{
prime[count++] = i;
}
for (int j = i + i; j < maxn; j += i)
{
p[j] = true;
}
}
}
int main()
{
find_prime();
for (int i = 0; i < count; i++)
{
if (i == count - 1)
{
cout << prime[i] << endl;
continue;
}
cout << prime[i] << " ";
}
return 0;
}