绝世水题
维护一个欧拉函数前缀和就好了。
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
int n,phi[10000005],prime[1000005];
bool flag[10000005];
ll ans,sum[10000005];
inline void get_phi()
{
phi[1]=1;
for (int i=2;i<=n;i++)
{
if (!flag[i]) {prime[++prime[0]]=i; phi[i]=i-1;}
for (int j=1;j<=prime[0]&&i*prime[j]<=n;j++)
{
flag[i*prime[j]]=1;
if (i%prime[j]==0) {phi[i*prime[j]]=phi[i]*prime[j]; break;}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
int main()
{
scanf("%d",&n);
get_phi();
for (int i=1;i<=n;i++) sum[i]=sum[i-1]+phi[i];
for (int i=1;i<=prime[0];i++)
ans+=sum[n/prime[i]]*2-1;
cout << ans << endl;
return 0;
}