Cod sursa(job #21559)

Utilizator alinaddoca alina alinad Data 23 februarie 2007 20:47:32
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#include<string.h>

long n;

void erathostene()
{
 char p[62501];
 memset(p, 0, 62501);
 long i, j, pr, q;
 long s=1;
 for(i=1; ((i*i)<<1)+(i<<1)<=n; i+=1)
   if((p[i>>3]&(1<<(i&7)))==0)
     for(j=((i*i)<<1)+(i<<1); (j<<1)+1<=n; j+=(i<<1)+1)
       p[j>>3] |=(1<<(j&7));

 FILE *f=fopen("fractii.out", "w");
 /*for(i=1; 2*i+1<=n; ++i)
  if((p[i>>3]&(1<<(i&7)))==0)
    {
     fprintf(f, "%ld ", 2*i+1);
     s++;
    } */


 for(j=2; j<=n; j++)
  {
   pr=j;
   if(j%2==0)
     pr=pr/2;
   for(i=1; 2*i+1<=n; ++i)
    if((p[i>>3]&(1<<(i&7)))==0 && j%(2*i+1)==0)
      {
       q=2*i+1;
       pr=pr-pr/q;
      }
   s=s+2*pr;
  }


 fprintf(f, "%ld", s);
 fclose(f);
}



int main()
{
 FILE *f=fopen("fractii.in", "r");
 fscanf(f, "%ld", &n);
 fclose(f);


 erathostene();

 return 0;

}