Cod sursa(job #144707)

Utilizator DraStiKDragos Oprica DraStiK Data 27 februarie 2008 21:22:39
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <cstdio>
int a[2000000/2/8+1];
int main ()
{
    freopen ("ciur.in","r",stdin);
    freopen ("ciur.out","w",stdout);
    int i,j,n,k=1;
    scanf ("%d",&n);
    printf ("2,");
    for (i=1; ((i*i)<<1)+(i<<1)<=n; ++i)
        if (!(a[i>>3]&(1<<(i&7))))
           for (j=((i*i)<<1)+(i<<1); (j<<1)+1<= n; j+=(i<<1)+1) 
                 {  
                             a[j>>3]|=(1<<(j&7));
        }
    for (i=1; (i<<1)+1<=n; ++i)
        if (!(a[i>>3]&(1<<(i&7))))
           ++k;   
    printf ("\n%d",k);
    for (i=1; (i<<1)+1<=n; ++i)
        if (!(a[i>>3]&(1<<(i&7))))  
           printf ("%d,",(i<<1)+1);
    return 0;
}