Eratosthenes筛法
算法思想:
从小到大枚举所有数,对每一个素数,筛去其所有的倍数,剩下的就都是素数了。
比如:
已知2为素数,筛去2的倍数4,6,8,10…
继续枚举到3,筛去3的倍数6,9,12,15…
由于4已被筛去,故其不是素数,来到5,筛去5的倍数10,15…
如此下去,即可得到一个素数表
代码实现:
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <map>
#include <cstdio>
#include <cstdlib>
using namespace std;
//素数筛法
const int Max = 101;
int prime[Max],pNum = 0;//pNum存放素数个数
bool p[Max] = {false};
void findPrime()
{
for(int i = 2; i < Max;i++)//遍历从2到100的数
{
if(p[i] == false)//若i为素数
{
prime[pNum++] = i;//将i添加到prime数组中
for(int j = i+i;j < Max;j+=i)//筛掉i的倍数
{
p[j] = true;
}
}
}
}
int main()
{
findPrime();
for(int i = 0;i < pNum;i++)
{
printf("%d\n",prime[i]);
}
return 0;
}