Cod sursa(job #22132)

Utilizator alinaddoca alina alinad Data 25 februarie 2007 19:29:50
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>
#include<string.h>

long n;

void erathostene()
{
 char p[500001];
 memset(p, 0, 500001);
 long i, j, pr, q;
 long s=1;

 for(i=1; (i*i<<1)+(i<<1)<=n; i+=1)
  if(p[i]==0)
     for(j=((i*i)<<1)+(i<<1); (j<<1)+1<=n; j+=(i<<1)+1)
       p[j]=1;


 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 && 2*i+1<=j; ++i)
    if(p[i]==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;

}