原理: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);*/
//两种输出方式
}