Pagini recente » Cod sursa (job #1193129) | Cod sursa (job #29010) | Cod sursa (job #1473125) | Cod sursa (job #1012619) | Cod sursa (job #2215465)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ciur.in");
ofstream fout ("ciur.out");
int nprime, n;
vector <int> primes;
int least [2000009];
bool f [2000009];
void E1 (void){
for (int i = 2; i <= n; i ++){
if (least [i] == 0) {
primes.push_back (i);
least [i] = i;
}
for (int j = 0; primes [j] <= least [i] && i * primes [j] <= n && j < primes.size (); j ++) {
if (least [i * primes [j]] != 0)least [i * primes [j]] = min(least [i * primes [j]], primes [j]);
else least [i * primes [j]] = primes [j];
}
}
for (int i = 2; i <= n; i ++)
if (least [i] == i)nprime ++;
}
void E2 (void){
for (int i = 4; i <= n; i += 2)f [i] = 1;
for (int i = 3; i * i <= n; i += 2)
if (f [i] == 0)
for (int j = i * i; j <= n; j += 2 * i)
f [j] = 1;
for (int i = 2; i <= n; i ++)nprime += !f [i];
}
int main (void){
fin >> n;
E1 ();
fout << nprime;
return 0;
}