例如要求2至20里的所有质数。先假设这些数全是质数;
再令i=2,然后剔除2的所有倍数,即标记4,6,8,10,12,14,16,18,20,说明这些数不是质数;
因为3未标记,所以3是质数,再令i=3,标记所有3的倍数;
因为4被标记过说明4不是质数,所以跳过4,从未标记的5开始,标记所有5的倍数;
以此类推,被标记过的数都不是质数,最后输出所有未标记的数,即质数。
以下是求100000内的质数程序:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[100005]={0};
int i,j;
for(i=2;i<=100000/i;i++)
{
if(a[i]==0) //判断数字是否被标记,未标记说明是质数
{
for(j=2;i*j<=100000;j++)
{
a[i*j]=1; //标记所有i(质数)的倍数
}
}
}
for(i=2;i<=1000;i++)
{
if(a[i]==0)
{
cout<<i<<endl; //输出所有未被标记的数(质数)
}
}
}