#include<iostream>
#include<cstring>
using namespace std;
const int n=100;
int prime(int a[])
{
for(int i=1;i<=n;++i)
{
if(!a[i]) //找到素数
{
for(int j=2;j*i<=n;++j)
{
a[i*j]=1; //筛掉所有该素数的倍数
}
}
}
}
int main()
{
int a[n];
memset(a,0,sizeof(a)); //以数组下标表示数,所有数组的值均初始化为0
a[0]=1; //0和1不是素数
a[1]=1;
prime(a);
for(int h=1;h<=n;++h)
{
if(!a[h]) //值为0则是素数,输出
{
cout<<h<<endl;
}
}
return 0;
}
另一范例
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 100000//求MAX范围内的素数
long long su[MAX],cnt;
bool isprime[MAX];
void prime()
{
cnt=1;
memset(isprime,1,sizeof(isprime));//初始化所有数均为素数
isprime[0]=isprime[1]=0;//0,1不是素数
for(long long i=2;i<=MAX;i++)
{
if(isprime[i])
{
su[cnt++]=i;//保存素数i
}
for(long long j=1;j<cnt&&su[j]*i<MAX;j++)
{
isprime[su[j]*i]=0;//筛掉小于等于i的素数和i的积构成的合数
}
}
}
int main()
{
prime();
for(long long i=1;i<cnt;i++)
{
printf("%d ",su[i]);
}
return 0;
}
本文介绍两种使用C++实现的素数筛选算法。一种是通过数组记录每个数是否为素数,然后筛掉所有已知素数的倍数;另一种是使用埃拉托斯特尼筛法,保存所有筛出的素数并输出。
1270

被折叠的 条评论
为什么被折叠?



