原理:2是素数,那么2的倍数一定不是素数。把2的倍数都标为1,下一个是3,判断3没有被标记。那么3也是素数,把3的倍数也标为1,一直往下标。
代码:
//:此代码为10000以内素数打表
#include<stdio.h>
#include<algorithm>
using namespace std;
int book[1000000],a[1000000];
int main()
{
int n=10000,i,k=0,j;
//这是算n以内的素数 也可以输入n,此处直接定义了
book[1]=1;//标记数组,1不是素数
for(i=2;i<=n;i++)//从2开始
{
if(!book[i])//如果book没被标记
{
a[k++]=i;//存到素数数组里
for(j=i*2;j<=n;j+=i)//同时把这个素数的倍数都标记
{
book[j]=1;
}
}
}
for(i=0;i<k;i++)
printf("%d ",a[i]);
/*for(i=1;i<=10000;i++)
if(!book[i])
printf("%d ",i);*/
//两种输出方式
}
本文介绍了一种高效的素数筛选算法,该算法通过逐步排除已知素数的倍数来找出10000以内的所有素数。算法首先设定2是最小的素数,并将所有2的倍数标记为合数。接着检查下一个未被标记的数3,将其视为素数并标记其所有倍数。以此类推,直至遍历完指定范围内的所有整数。
1223

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



