Mai intai trebuie sa te autentifici.
Cod sursa(job #144707)
Utilizator | 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;
}