埃拉托色尼筛选法求质数序列

功能:用来产生一个不大于整数n的质数序列。


算法伪代码描述:

int[] sieve(n)
{
	for(p=2;p<=n;p++)
		A[p]=p;
	for(p=2;p*p<=n;p++)
	{
		if(A[p] != 0)
			for(b=p+p;b<=n;b+=p)
				A[b]=0;
	}
	result = new[];
	for(p=2;p<=n;p++)
		if(A[p]!=0)
			result.add(A[p]);
	return result;
}

实现:

#include <vector>
using namespace std;
vector<int>  & sieve(int n, vector<int> &b)
{
	vector<int> A(n+1);
	for(int i=2;i<=n;i++)
		A[i]=i;
	for(int i=2;i<=n;i++)
	{
		if(A[i]!=0)
		{
			for(int b=i+i;b<=n;b+=i)
				A[b]=0;
		}
	}
	b.clear();
	for(int i=2;i<=n;i++)
		if(A[i]!=0)
			b.push_back(i);
	return b;
}
posted @ 2022-04-19 18:17  enbug  阅读(70)  评论(0编辑  收藏  举报