埃拉托色尼筛选法求质数序列
功能:用来产生一个不大于整数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;
}