Pagini recente » Cod sursa (job #2024265) | Cod sursa (job #1277064) | Cod sursa (job #202869) | Cod sursa (job #321444) | Cod sursa (job #1222840)
#include <stdio.h>
#include <string.h>
#include <iostream>
#define MAX 1000005
using namespace std;
int n,phi[MAX],ciur[MAX],exp[MAX][2],put[25];
long long sol;
int main()
{
freopen("fractii.in","r",stdin);
freopen("fractii.out","w",stdout);
scanf("%d",&n);
for (int i=2;i<=n;++i)
{
if (ciur[i]==0)
{
int j;
if (1LL*i*i<=n)
{
j=i*i; while (j<=n) ciur[j]=1,j+=i;
}
}
}
for (int i=1;i<=n;++i) phi[i]=1;
for (int i=2;i<=n;++i)
{
if (ciur[i]==0)
{
phi[i]=i-1;
exp[i][1]=1; exp[i][0]=i;
put[0]=1; int j=1; while ((put[j-1]*i)<=n) put[j]=put[j-1]*i,++j;
j=2;
int r=2*i;
while (r<=n)
{
int v=0; if (exp[j][0]==i) v=exp[j][1];
phi[r]*=put[v]*(i-1);
exp[r][1]=v+1;
exp[r][0]=i;
++j;
r+=i;
}
}
}
for (int i=2;i<=n;++i) sol=sol+(1LL*phi[i]*2);
sol++;
cout<<sol;
fclose(stdin);
return 0;
}