题意:
思路:
首先我们打表观察得到,f(x)为 x分解质因数之后 ∏pi^(ti/2)
再分析可得,∑f(i)=n/(1*1)*1*只为1的个数+n/(2*2)*2*只为2的个数+...
但是结果超时。
在进行分析可得,只为x的个数 就是phi(x)。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=b;i>=a;i--)
using namespace std;
#define ll long long
const int N=3e5+5;
ll rd()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int T;
ll n;
ll f[10000010],ans,sum;
int main()
{
T=rd();
while(T--)
{
ans=0;sum=0;
n=rd();
int p=sqrt(n);
dep(i,2,p)
{
int x=i+i;
f[i]=n/(1ll*i*i);
while(x<=p)
{
f[i]-=f[x];
x+=i;
}
ans=ans+1ll*f[i]*i;
sum+=f[i];
}
printf("%lld\n",ans+n-sum);
}
}
