Cod sursa(job #131038)

Utilizator Astrid28Ruxandra Cohal Astrid28 Data 2 februarie 2008 22:31:10
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream.h>
#include<math.h>

long n;
long phi[10000];
long long sum;
ifstream fin("fractii.in");
ofstream fout("fractii.out");



void citire()
{
  fin>>n;
  fin.close();
}


int prim(long x)
{
  long d;
  for(d=2;d<=sqrt(x);d++)
    if (x%d==0) return 0;
  return 1;
}



long nr(long x)
{
  long d,p=0;
  for(d=2;d<=sqrt(x);d++)
    {
      while(x%d==0)
	{x/=d; p=1;}
      if(p&&x==1)
	return d;
    }
  return 0;
}


long f(long x)
{
  long p,d,aux,x2,aux2;
  if (prim(x)) return x-1;
  p=nr(x);
  if (p) {aux2=x-x/p;
	  return aux2;}

  d=2;
  while(d<=x/2)
    {
      p=0;x2=x;
      while(x%d==0)
	{p++; x/=d;}
      if (p)
	{aux=phi[(int)pow(d,p)]*phi[x2/(int)pow(d,p)];
	 return aux;
	}
    }
}



void calculeaza()
{
  phi[1]=0;
  phi[2]=1;
  for(int i=3;i<=n;i++)
    phi[i]=f(i);
}


int main()
{
  citire();
  calculeaza();
  sum=0;
  for(int i=1;i<=n;i++)
    sum+=phi[i];
  fout<<1+2*sum<<endl;
  fout.close();
  return 0;
}