Pagini recente » Cod sursa (job #1381218) | Cod sursa (job #2968333) | Cod sursa (job #107913) | Cod sursa (job #163527) | Cod sursa (job #131037)
Cod sursa(job #131037)
#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);
}
void main()
{
citire();
calculeaza();
sum=0;
for(int i=1;i<=n;i++)
sum+=phi[i];
fout<<1+2*sum<<endl;
fout.close();
}