Cod sursa(job #153706)

Utilizator alex23alexandru andronache alex23 Data 10 martie 2008 18:12:50
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>
#include <math.h>

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

   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);
                    k=1;
                    j=3;
                    while (k<nr-1000)
                      {if (a[j]) k++;
                       j++;
                       }
                    k=0;
                    for (i=j;i<=n;i++)
                        if (a[i]) {fprintf(f,"%d ",i); k++;}
                    //fprintf(f,"\n%d",k);
                    }
                             */
   fprintf(f,"%ld",nr);
   fclose(f);

   return 0;
   }