#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; const int maxn = 1000000 + 200; int prime[maxn]; //第i个素数 bool is_prime[maxn + 1]; //is_prime[i]位true, 表示i是素数 void solve(); int sieve(int n); //返回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] = true; for (int i = 2; i <= n; i++) { if (is_prime[i]) { //是素数 prime[p++] = i; // cout << i << " "; //输出素数(每次剩余的最小数字是i,i就是素数) for (int j = 2*i; j <= n; j += i) is_prime[j] = false; //将i的倍数全部划去 } } return p; } void solve() { int n; scanf("%d", &n); cout << sieve(n) << endl; } int main() { solve(); return 0; }
埃氏筛法的复杂度是O(nloglogn)
时间: 2024-09-30 23:52:24