Cod sursa(job #21312)

Utilizator alinaddoca alina alinad Data 23 februarie 2007 11:47:59
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#include<mem.h>


long n;


void erathostene()
{
 long s=1, q, pr;
 long i, j;
 char p[62500];
 memset(p, 0, 62500);
 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, "%d ", 2*i+1);
	 s++;
	}     */

 s=1;
 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>>3]&(1<<(i&7)))==0)
	if((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;

}