==∑i=1n∑j=1nφ(gcd(φ(i),φ(j)))∑d=1nφ(d)∑i=1⌊nd⌋∑j=1⌊nd⌋s(id)s(jd)∑x|i,x|jμ(x)∑d=1nφ(d)∑x=1⌊nd⌋μ(x)f(dx)
其中
s(x)=∑i=1n[φ(i)=x]f(x)=⎛⎝⎜⎜∑i=1⌊nx⌋s(ix)⎞⎠⎟⎟2
预处理 f 和求解原问题都可以
#include<cstdio>
#include<algorithm>
using namespace std;
#define LL long long
const int maxn=2000010;
int phi[maxn],mu[maxn],s[maxn],prm[maxn],
n,tot;
LL f[maxn];
void solve()
{
int x;
LL t,ans=0;
scanf("%d",&n);
phi[1]=mu[1]=s[1]=1;
for (int i=2;i<=n;i++)
{
s[i]=0;
if (!phi[i])
{
prm[++tot]=i;
phi[i]=i-1;
mu[i]=-1;
}
for (int j=1;j<=tot&&(x=i*prm[j])<=n;j++)
if (i%prm[j])
{
phi[x]=phi[i]*(prm[j]-1);
mu[x]=-mu[i];
}
else
{
phi[x]=phi[i]*prm[j];
mu[x]=0;
break;
}
s[phi[i]]++;
}
for (int i=1;i<=n;i++)
{
f[i]=0;
for (int j=i;j<=n;j+=i) f[i]+=s[j];
f[i]*=f[i];
}
for (int i=1;i<=n;i++)
{
t=0;
for (int j=1;i*j<=n;j++) t+=mu[j]*f[i*j];
ans+=t*phi[i];
}
printf("%lld\n",ans);
}
int main()
{
int T;
scanf("%d",&T);
while (T--) solve();
}