Cod sursa(job #1315747)

Utilizator obidanDan Ganea obidan Data 13 ianuarie 2015 01:28:12
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <iostream>
using namespace std;
#define setbit(i)

const int NMax = 130000;
char ciur[NMax];

int main()
{
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdout);
    int i,n,number=1,j;
    cin>>n;

    for(i=1; (((i*i)<<1) + (i<<1)) <= n ; i++  )
    {
        if((ciur[i>>3] & (1<<(i&7)))==0)
        {
            // j = 2
            for(j = ((i*i)<<1) + (i<<1) ; (j<<1)+1<=n; j= j + (i<<1)+ 1)
            {
                ciur[j>>3] = ciur[j>>3] |  (1<<(j&7));
            }
        }
    }
    for (i = 1; 2 * i + 1 <= n; ++i)
       if ((ciur[i >> 3] & (1 << (i & 7))) == 0)
           number++;
    cout<<number;
}