Pagini recente » Cod sursa (job #2445083) | Cod sursa (job #2121418) | Cod sursa (job #1830293) | Cod sursa (job #1349832) | Cod sursa (job #512645)
Cod sursa(job #512645)
#include<fstream.h>
long long a[1000001], nr;
int n, i, c[1001], prim[1001], m;
void ciur(int n)
{
int i, j;
for (i=2; i<=n; ++i)
if (c[i]==0)
{
prim[++m]=i;
for (j=i+i; j<=n; j+=i)
c[j]=1;
}
}
long long putere(long long d, long long x)
{
long long nr=1;
while (x%d==0)
{
nr*=d;
x/=d;
}
return nr;
}
long long fi(long long x)
{
long long d=2, p=1, aux=x;
if (x%2==0) p=putere(2, x);
else
{
d=2;
while (p==1 && prim[d]*prim[d]<=x)
if (x%prim[d]==0) p=putere(prim[d], x);
else d+=1;
if (prim[d]*prim[d]>x) {d=x;p=x;}
else d=prim[d];
}
return p/d*(d-1)*a[aux/p];
}
int main()
{
ifstream f("fractii.in");
ofstream g("fractii.out");
f>>n;
int nn=sqrt(n);
ciur(nn);
a[1]=1;
for (i=2; i<=n; ++i)
a[i]=fi(i);
nr=1;
for (i=2; i<=n; ++i) nr+=2*a[i];
g<<nr<<"\n";
f.close();
g.close();
}