筛法求素数的想法就是任意合数都可以表示为素数的积,所以我们找到一个素数便可以筛掉所有他的倍数,这样找素数的范围不断的缩小,最后剩下的就都是素数。
#include <iostream>
#include<cstring>
using namespace std;
const int n = 100;
void 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;
a[1] = 1; //1和0不是素数
prime(a);
for(int h = 1; h <= n; ++h)
{
if(!a[h]) //值为0则是素数,输出
cout << h << endl;
}
return 0;
}
都只是作为自己学习的记录,可能会有些疏忽。