线性筛模版!!!
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
ll n,phi[10000009]={0},sum[10000009]={0},pri[10000009];
bool b[10000009]={false};
int main()
{
scanf("%lld",&n);
phi[1]=sum[1]=1;//
for (int i=2;i<=n;i++)
{
if (!b[i])
{
phi[i]=i-1;
pri[++pri[0]]=i;//线性筛需用记录质数
}
for (int j=1;j<=pri[0]&&i*pri[j]<=n;j++)//每个i都要循环
{
b[i*pri[j]]=true;//标记它不是质数
if (i%pri[j]==0)
{
phi[i*pri[j]]=phi[i]*pri[j];//这个地方一定要记住是phi【i】而不是i,你要明白是phi【i】;
break;
}
else phi[i*pri[j]]=phi[i]*(pri[j]-1); ///分成两种情况
}
sum[i]=sum[i-1]+phi[i];
}//以上的线性筛!!!
ll ans=0;
for (int i=1;i<=pri[0];i++)
{
ll x=pri[i];
ans+=sum[n/x]*2-1;
}
printf("%lld",ans);
return 0;
}