传送门
题解:
1.莫比乌斯反演,又慢又麻烦,拒绝
2.欧拉函数性质,外层枚举n以内的质数d,内层求n/d范围内互质的数对,这一步可以通过预处理欧拉函数前缀和实现,注意数对是有序的,但是(1,1)要去重。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e7+2;
int n,phi[MAXN],prime[MAXN/10],tot=0;
bool vis[MAXN];
ll ans=0,sum[MAXN]={0};
inline void linear_shaker() {
phi[1]=1;
memset(vis,false,sizeof(vis));
for (register int i=2;i<=n;++i) {
if (!vis[i]) prime[++tot]=i,phi[i]=i-1;
for (int j=1;j<=tot&&i*prime[j]<=n;++j) {
vis[i*prime[j]]=true;
if (i%prime[j]==0) {phi[i*prime[j]]=phi[i]*prime[j];break;}
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
for (register int i=1;i<=n;++i) sum[i]=sum[i-1]+phi[i];
}
int main() {
scanf("%d",&n);
linear_shaker();
for (register int i=1;i<=tot;++i)
ans+=(sum[n/prime[i]]<<1)-1;
printf("%lld\n",ans);
return 0;
}