即是将素数标记,筛去已标记素数倍数的方法,来获取素数表,这样大大降低了时间复杂度。
#include<iostream>
using namespace std;
const int maxn = 1000;//表长
int prime[maxn], pNum = 0;//prime数组存放所有素数,pNum记录素数个数
bool p[maxn] = { false };//散列p,true表示不是素数,反之false为素数
void Find_Prime(int n)
{
for (int i = 2; i < n+1; i++)//切记是i<n+1,不是i<n也不是i<=n+1
{
if (p[i] == false)//当i为素数
{
prime[pNum++] = i;//把素数i存到prime数组中
for (int j = i + i; j < n+1; j += i)
{
//筛去所有i的倍数
p[j] = true;
}
}
}
}
int main(void)
{
int n;
cin >> n;
Find_Prime(n);
for (int i = 0; i < pNum; i++)
cout << prime[i] << ' ';
system("pause");
return 0;
}