Cod sursa(job #305295)

Utilizator utcistuBarcau Tomsa utcistu Data 16 aprilie 2009 21:16:10
Problema Ciurul lui Eratosthenes Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.54 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 2000000/16+1

char p[SIZE];

int main()
{
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdout);
    int i,n,j,nr=1;
    scanf("%d",&n);
    for (i=1;((i*i)<<2)+(i<<2)+1<=n;i++)
    {
    if ((p[i>>3]&(1<<(i&7)))==0)
    {
        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)))==0)
    nr++;
    printf("%d\n",nr);
    fclose(stdout);
    return 0;
}