Issue:
Meaning:
- 求 1 ∼ n 1 \sim n 1∼n中质数数量;
Thinking:
- 时间复杂度: O ( n ) O(n) O(n)
Code:
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int primes[N], cnt;
bool st[N];
void get_primes(int n)
{
for (int i = 2; i <= n; i ++ )
{
if (!st[i]) primes[cnt ++ ] = i;
for (int j = 0; primes[j] <= n / i; j ++ )
{
st[primes[j] * i] = true;
if (i % primes[j] == 0) break; //每次筛都是以最小的质因子,i如果能整除primes[j],
} //那么最小的质因子就不是primes[j]*i,而是primes[j];
}
}
int main()
{
int n;
cin >> n;
get_primes(n);
cout << cnt;
return 0;
}
Tips:
- 每次以最小的质因子来筛;
- 这篇博客算作一个模板。