Cod sursa(job #208674)

Utilizator cchescaChesca Ciprian cchesca Data 17 septembrie 2008 20:36:33
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>

using namespace std;

long euler(long x)
{
long p[500],i,d,f,k,ie,y=x;
k=0; // nr. de factori primi

// tratam cazul cand n este 1
if (x==1) p[++k]=1;

// elimin 2 din descompunere
d=2;f=0;
while (x>1&&x%d==0) {x/=d;f=1;}
if (f) p[++k]=d;

// elimin 3,5,7,... din descompunere
d=3;
while (x>1)
{
  f=0;
  while (x%d==0) {x/=d;f=1;}
  if (f) p[++k]=d;
  d+=2;
}

// calculez indicatorul lui Euler
ie=y;
for(i=1;i<=k;i++)
   ie*=(p[i]-1);
for(i=1;i<=k;i++)
   ie/=p[i];

return ie;
}


int main()
{
    long n,i,s=0;
    ifstream f("fractii.in");
    ofstream g("fractii.out");
    f>>n;
    f.close();
    for(i=2;i<=n;i++)
	 s+=euler(i);
    g<<2*s+1;
    f.close();
    g.close();
return 0;

}