题目:给定整数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; }