Cod sursa(job #146749)

Utilizator ViksenVictor-Nicolae Savu Viksen Data 2 martie 2008 03:14:24
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>

char V[260000];

int ciur ( int n )
{
    int i,p,j;
    for ( i=1 ; ((i*i)<<1)+(i<<1)<=n ; i++ )
        if (!(V[i>>3] & (1<<(i&7))))
            for ( j= ((i*i)<<1) + (i<<1) ; (j<<1)+1<=n ; j+= (i<<1)+1 )
                V[j>>3]|=i<<(j&7);
    for ( i=0,p=1 ; (p<<1)+1 <=n ; p++ )
        if (!(V[p>>3]&(1<<(i&7)))) i++;
    return i;
}

int main ()
{
    int n,i;
    freopen ( "ciur.in" , "r" , stdin );
    scanf ( "%d" , &n );
    fclose ( stdin );

    int x = ciur(n);

    freopen ( "ciur.out" , "w" , stdout );
    printf ( "%d\n2" , x );
    for ( i=1 ; (i<<1)+1<=n ; i++ )
        if (!( V[i>>3]&(1<<(i&7)) ))
        {
            x--;
            if (x<1000) printf ( " %d" , (i<<1)+1 );
        }
    fclose ( stdout );

    return 0;
}