总感觉在内层循环也要算时间复杂度,好像不是O(n),但确实是O(n),为什么?
#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
int n;
int cnt;
int primes[N];
bool st[N];
int get_prime(int n){
for(int i = 2; i <= n; i++){
if(!st[i]) primes[++cnt] = i;
for(int j = 1; primes[j] <= n / i; j++){
st[i * primes[j]] = true;
if(i % primes[j] == 0) break;
}
}
}
int main(){
cin >> n;
get_prime(n);
cout << cnt;
return 0;
}