Cod sursa(job #812053)

Utilizator cahemanCasian Patrascanu caheman Data 13 noiembrie 2012 12:28:45
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#include<math.h>
int d[1000];
int main()
{
  freopen("fractii.in","r",stdin);
  freopen("fractii.out","w",stdout);
  int i,  ci,  j,  nr=12,  n,  lim;
  long long s  =  1,  r;
  double x;
  scanf("%d",&n);
  d[1]  =  2;
  d[2]  =  3;
  d[3]  =  5;
  d[4]  =  7;
  d[5]  =  11;
  d[6]  =  13;
  d[7]  =  17;
  d[8]  =  19;
  d[9]  =  23;
  d[10]  =  29;
  d[11]  =  31;
  d[12]  =  37;
  for(i=41;  i<=1000;  i+=2)
  {
	for(j=1;  j<=nr;  j++)
	  if(i  %  d[j]  ==  0)
		break;
	if(j  ==  nr  +  1)
	  d[++  nr]  =  i;
  }
  for(i=2;  i<=n;  i++)
  {
    x  =  i;
	ci  =  i;
	lim  =  sqrt(i);
	for(j=1;  j<=nr  &&  ci>1  &&  d[j]  <=  lim;  j++)
	  if(ci  %  d[j]  ==  0)
	  {  
		while(ci  %  d[j]  ==  0)
		{
		  ci  /=  d[j];	
		}
		x  =  x  *  ((double)1  -  ((double)1  /  d[j]));
	  }
	if(ci>1)
	  x  =  x  *  ((double)1  -  ((double)1  /  ci));
	r  =  x;
	s  +=  r+r;
  }
  printf("%lld",s);
  return 0;
}