Cod sursa(job #160001)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 14 martie 2008 17:25:57
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <string.h>
#include <stdio.h>
#define N 2000001
#define P 250
int main ()
{FILE *f,*fout;
 f=fopen("ciur.in","r");
 fout=fopen("ciur.out","w");
 long n,i,j,k,S,vf,sw;
 int sir[N];
 int prim[P];
 memset(sir,0,sizeof(sir));
 memset(prim,0,sizeof(prim));
 fscanf(f,"%ld",&n);
 prim[0]=2;vf=0;

 for (i=2;i*i<=n;i++)
 {for (sw=1,j=0;j<=vf;j++)
  {if(i%prim[j]==0){sw=0;break;}
  }
  if(sw==1)
  {prim[++vf]=i;
  }
 }

 for (i=2;i<=n/2;)
 {for (j=2*i;j<=n;j+=i)
  sir[j]=1;
  do
  {i++;
   for (sw=1,j=0;j<=vf;j++)
   {if(i%prim[j]==0&&i!=prim[j]){sw=0;break;}
   }
  }
  while(sw==0&&i<=n/2);

 }

 sir[1]=1;
 sir[2]=0;
 for (S=0,i=1;i<=n;i++)
 {if(!sir[i])S++;
 }
 fprintf(fout,"%ld",S);
 fclose(fout);
 return 0;
}