Pagini recente » Cod sursa (job #710867) | Cod sursa (job #2479129) | Cod sursa (job #1339729) | Monitorul de evaluare | Cod sursa (job #157020)
Cod sursa(job #157020)
#include <fstream.h>
#include <math.h>
#define NMAX 1000001
long baze[NMAX];
long pow(long p,long e)
{ if (e==0) return 1;
if (e%2) return p*pow(p*p,e/2);
return pow(p*p,e/2);
}
/*long sqrt(long x)
{ long st=1,dr=x;
long mij;
while (st<=dr)
{ mij=(st+dr)/2;
if (mij*mij<=x&&(mij+1)*(mij+1)>x) return mij;
if (mij*mij>x) dr=mij-1;
else st=mij+1;
}
return 0;
} */
long prim(long x)
{ long i;
long sx=(long)sqrt(x);
if (x%2==0) return 2;
for (i=3;i<=sx;i+=2)
if (x%i==0) return i;
return x;
}
int main()
{ long n,i,j,t[NMAX],x,p,e,a,c;
long nr;
ifstream f("fractii.in");
f>>n;
f.close();
nr=1;
t[1]=1;
for (i=2;i<=n;i++)
{ x=prim(i);
if (x==i) p=i;
else p=baze[x];
baze[i]=p;
if (p==i) e=1;
else { a=i;e=0;
while (a%p==0)
{ e++;
a=a/p;
}
}
c=pow(p,e-1);
a=i/(c*p);
t[i]=(p-1)*c*t[a];
nr+=2*t[i];
}
ofstream g("fractii.out");
g<<nr;
g.close();
return 0;
}