Pagini recente » Cod sursa (job #120390) | Cod sursa (job #2501904) | Cod sursa (job #886000) | Cod sursa (job #2074388) | Cod sursa (job #173493)
Cod sursa(job #173493)
#include<stdio.h>
#include<math.h>
int v[1000010];
long prim[100000],tot[1000010];
int main()
{
FILE *f,*g;
f=fopen("fractii.in","r");
g=fopen("fractii.out","w");
//ifstream f("fractii.in");
//ofstream g("fractii.out");
long n,l=0,k,e,a,i;
long long j;
fscanf(f,"%ld ",&n);
for (i=4;i<=n;i+=2) v[i]=1;
for (i=3;i<=n;i+=2)
{
v[i-1]=1;
if (v[i]==0)
{
for (j=i*i;j<=n;j+=i) v[j]=1;
}
}
if (n%2==0) v[n]=1;
v[2]=0;
for (i=2;i<=n;i++) if (v[i]==0) prim[++l]=i;
tot[1]=1;
for (i=2;i<=n;i++)
{
if (!v[i]) tot[i]=i-1;
else
{
for (j=1;j<=l;j++)
{
if (i%prim[j]==0)
{
k=prim[j];
a=i;
e=0;
while (a%k==0)
{
e++;
a/=k;
}
break;
}
}
tot[i]=(k-1)*(i/(a*k))*tot[a];
}
}
long long s=0;
for (i=2;i<=n;i++) s+=tot[i];
s=s*2+1;
fprintf(g,"%lld\n",s);
//fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}