埃拉托斯特尼筛法简称为埃氏筛,该筛法的思路是:当判断一个数为素数之后,则这个素数的倍数都是和数,利用数组记录。
代码实现如下:
#include <iostream>
using namespace std;
const int N = 10000001;
int prime[1000000]; //用于记录素数
char isprime[N];//用于记录数的性质
int main()
{
int n, cnt = 0;
for(int i = 0; i <= N; i++) isprime[i] = 1;//首先将数组初始化为1
isprime[0] = isprime[1] = 0;
cin >> n;
for (int i = 2; i <= n; i++)
if (isprime[i])
{
prime[++cnt] = i;//cnt作为计数器和记录素数数组的下标
for (int j = i + i; j <= n; j += i)//将该素数的倍数全部设置成非素数
isprime[j] = 0;
}
cout << cnt;
return 0;
}