Cod sursa(job #1170161)
Utilizator | Bogdan Ciobanu bciobanu | Data | 12 aprilie 2014 19:37:27 |
---|---|---|---|
Problema | Ciurul lui Eratosthenes | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.58 kb |
#include <cstdio>
#include <vector>
static const int NMAX=2000005;
std::vector<unsigned char> V(NMAX,0);
int ciur(int limit)
{
int i,j,ii,nrprime=1; // il includ pe 2
for (i=3;i<=limit;i+=2)
{
if (!(V[i>>4]&(1<<((i>>1)&7))))
{
++nrprime;
for (j=i+(ii=i<<1);j<=limit;j+=ii) V[j>>4]|=1<<((j >> 1)&7);
}
}
return nrprime;
}
int main()
{
FILE *in=fopen("ciur.in","rt"),*out=fopen("ciur.out","wt");
int n;
fscanf(in,"%d",&n);
fclose(in);
fprintf(out,"%d\n",ciur(n));
fclose(out);
}