Cod sursa(job #149678)

Utilizator alex23alexandru andronache alex23 Data 5 martie 2008 23:27:16
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <math.h>

 int main()
  {FILE *f;
   int n,i,j,nr=1,k;
   char a[2000000];

   f=fopen("ciur.in","r");
   fscanf(f,"%d",&n);

   fclose(f);

   for (i=2;i<=n;i++)
      if (i%2) a[i]=1;
         else  a[i]=0;

   j=3;
   while (j<=sqrt(n))
     { if (a[j]) {for (i=2;i<=n/j;i++) a[i*j]=0;
                  nr++;
                 }
        j=j+2;
        }
   for (i=sqrt(n)+1;i<=n;i++)
      if (a[i]) nr++;

   f=fopen("ciur.out","w");
      if (n<=1000) {fprintf(f,"%d\n",nr);
                    fprintf(f,"2 ");
                    for (i=3;i<=n;i++)
                         if (a[i]) fprintf(f,"%d ",i);
                    }
             else  {fprintf(f,"%d\n",nr);
                    j=3;
                    k=1;
                    while (k<nr)
                       {if (a[i]) k++;
                        j=j+2;
                        }
                    for (i=j;i<=n;i++)
                         if (a[i]) fprintf(f,"%d ",i);
                    }

   fclose(f);

   return 0;
   }