Cod sursa(job #706861)
| Utilizator | Data | 5 martie 2012 20:09:30 | |
|---|---|---|---|
| Problema | Ciurul lui Eratosthenes | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.46 kb |
#include <cstdio>
#define NMax 2000001
#define N2Max (NMax+1)>>1
bool viz[N2Max];
long ciur(long N)
{
long nrp=1,pr=1,lim=(N-1)>>1,step;
while(pr<=lim)
{
step=pr<<1+1;
viz[pr]=1;
nrp++;
for(long i=pr;i<=lim;i+=step)
viz[i]=1;
while(viz[pr])
pr++;
}
return nrp;
}
int main()
{
freopen("ciur.in","rt",stdin);
freopen("ciur.out","wt",stdout);
long N;
scanf("%ld",&N);
long x=ciur(N);
printf("%ld",x);
}