Pagini recente » Cod sursa (job #1635903) | Cod sursa (job #591152) | Cod sursa (job #1329116) | Cod sursa (job #1024487) | Cod sursa (job #2917583)
#include <bits/stdc++.h>
using namespace std;
#define N 2000001
ifstream f("ciur.in");
ofstream g("ciur.out");
int n, cnt = 1;
bool v[N];
int main() {
f >> n;
// presupunem ca toate numerele sunt prime
memset(v, 1, n);
// putem sari marcarea multiplilor lui 2 ca neprimi
// ptr ca 2 este singurul numar prim par
// si incepem ciurul de la 3 cu increment de 2
// ptr ca numerele prime sunt impare.
for (int p = 3; p <= sqrt(n); p+=2)
// cautam un numar nemarcat (prim)
if (v[p] == 1)
// marcam multipli lui p incepand cu p^2 ca neprimi
for (int k = p; k <= n / p; v[k * p] = 0, k++);
// numerele ramase nemarcate sunt prime
for (int i = 3; i <= n; cnt += v[i], i+=2);
g << cnt << "\n";
return 0;
}