Cod sursa(job #626911)
| Utilizator | Data | 28 octombrie 2011 16:43:32 | |
|---|---|---|---|
| Problema | Ciurul lui Eratosthenes | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.45 kb |
#include <cstdio>
#define MAXN 2000100>>4
int main(){
freopen("ciur.in", "r", stdin);
freopen("ciur.out", "w", stdout);
static char P[MAXN];
int i, j, cnt=1, N;
scanf("%d", &N);
for(i=1; ((i*i)<<1)+(i<<1) <= N; i++)
if(!(P[i>>3] & (1<<(i&7))))
for(j=((i*i)<<1)+(i<<1); (j<<1)+1 <= N; j+=(i<<1)+1)
P[j>>3] |= (1<<(j&7));
for(i=1; (i<<1)+1 <= N; i++)
if(!(P[i>>3] & (1<<(i&7))))
cnt++;
printf("%d\n", cnt);
}
