Cod sursa(job #276213)

Utilizator AnDrEwBoYA Andrei AnDrEwBoY Data 10 martie 2009 22:51:17
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<stdio.h>
#define MAX_SIZE 2000001 / 2 / 8 + 1

char p[MAX_SIZE];

long CreazaCiur(int n)
{
     int i,j; long nr = 1;
     for (i = 1; ((i * i) << 1) + (i << 1) <= n; i += 1) 
     {  
        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 * i + 1 <= n; ++i)   
        if ((p[i >> 3] & (1 << (i & 7))) == 0) nr++;  
     return nr;
}

int main()
{
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdin);
    long long n;
    scanf("%lld",&n);
    printf("%ld",CreazaCiur(n));
    fclose(stdin); fclose(stdout);
   return 0;
}