Cod sursa(job #1133243)
| Utilizator | Data | 4 martie 2014 17:36:39 | |
|---|---|---|---|
| Problema | Ciurul lui Eratosthenes | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.61 kb |
#include <fstream>
#define NMax 200000/8/2+1
using namespace std;
int N;
char v[NMax];
int getTheNumber(int x)
{
int nr = 1, i, j;
for(i = 1 ; (i << 1) + 1 <= N ; ++i)
{
if((v[i >> 3] & (1 << (i & 7))) == 0)
{
for(j = ((i * i) << 1) + (i << 1) ; (j << 1) + 1 <= N ; j += (i << 1))
v[j >> 3] |= (1 << (j & 7));
++nr;
}
}
return nr;
}
int main()
{
ifstream fin("ciur.in");
ofstream fout("ciur.out");
fin >> N;
fout << getTheNumber(N);
fin.close();
fout.close();
return 0;
}
