Pagini recente » Cod sursa (job #811505) | Cod sursa (job #299926) | Cod sursa (job #2134862) | Cod sursa (job #2710601) | Cod sursa (job #2917509)
#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;
int root = sqrt(n);
// presupunem ca toate numerele sunt prime
memset(v, 1, n);
// dar sarim 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 toate celelalte numere prime sunt impare
for (int i = 3; i <= root; i+=2)
// cum gasim un multiplu de i, il marcam neprim
for (int k = i + i; k <= n; v[k] = 0, k+=i);
// toate numerele ramase nemarcate sunt prime
// asa ca incepem adunarea lor
for (int i = 3; i <= n; cnt += v[i], i+=2);
g << cnt << "\n";
return 0;
}