埃式筛法
例:素数的个数
题意:给定整数n。请问n以内有多少个素数 (n <= 10的6次幂)
输入:
11
1000000
输出:
5
78498
#include <cstdio> using namespace std; const int maxn = 1000000 + 10; int prime[maxn]; //第i个素数 bool is_prime[maxn]; //is_prime[i]为true表示i是素数 //返回n以内的素数的个数 int sieve(int n) { int p = 0; for (int i = 0; i <= n; i++) is_prime[i] = true; is_prime[0] = is_prime[1] = false; for (int i = 2; i <= n; i++){ if (is_prime[i]){ prime[p++] = i; for (int j = 2 * i; j <= n; j += i) is_prime[j] = false; } } return p; } int main() { int n; while (scanf("%d", &n) != EOF){ printf("%d\n", sieve(n)); } return 0; }