Cod sursa(job #21475)

Utilizator maria_bobesMaria Bobes maria_bobes Data 23 februarie 2007 18:24:26
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<string.h>
#include<stdio.h>


void erathostene(int n)
{
 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()
{
 long n;

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

 erathostene(n);

 return 0;

}