数据结构__打印素数表(埃氏筛法)

即是将素数标记,筛去已标记素数倍数的方法,来获取素数表,这样大大降低了时间复杂度。

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_41938259/article/details/86322511