Cod sursa(job #1809674)
| Utilizator | Data | 19 noiembrie 2016 10:03:00 | |
|---|---|---|---|
| Problema | Ciurul lui Eratosthenes | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.63 kb |
#include <fstream>
#include <vector>
using namespace std;
int main ()
{
ifstream fi ("ciur.in");
ofstream fo ("ciur.out");
int n;
fi >> n;
vector<bool> pr(n / 2 + 1);
int count = 1;
for (int i = 1; 2*(i*i + i) <= n; ++i)
{
if (pr[i] == 0) // 2i+1 is definitely prime
{
// eliminate 2i+1's multiples
for (int j = 2*(i*i + i); 2*j + 1 <= n; j += 2*i + 1)
{
pr[j] = 1;
}
}
}
for (int i = 1; 2*i + 1 <= n; ++i)
if (pr[i] == 0)
count += 1;
fo << count;
return 0;
}
