埃式筛选法

题目:给定整数n,请问n以内有多少个素数?

n<=1e6

样例输入1

11

输出

5

样例输入2

1000000

输出

78498

算法详解

i从2开始遍历,2肯定是素数那么他的倍数肯定不是素数,标记下来,然后遍历没被标记的数。遍历完所有就只剩下没被标记的素数了。

参考代码

#include <iostream>
#include <cstdio>
using namespace std;

const int MAX_N=1000000;
int is_prime[MAX_N+1];
int prime[MAX_N+1];
int sieve(int n);
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d
",sieve(n));
    return 0;
}
int sieve(int n){
    int sum=0;
for(int i=2;i<=n;i++){
    if(is_prime[i]==0){
            prime[sum++]=i;
        for(int j=2*i;j<=n;j+=i){
                is_prime[j]=1;
        }
    }
}
return sum;
}
原文地址:https://www.cnblogs.com/LuRenJiang/p/7448978.html