题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6434
1~n以内奇数的欧拉函数除以2,偶数的欧拉函数直接加和,求前缀和。打表
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define mod 998244353
#define For(i,m,n) for(int i=m;i<=n;i++)
#define Dor(i,m,n) for(int i=m;i>=n;i--)
#define LL long long
#define lan(a,b) memset(a,b,sizeof(a))
#define sqr(a) a*a
using namespace std;
const LL N=20000000;
int pr[N/5],p[N+100],tot,phi[N+100];
LL ans[N+5];
void init()
{
phi[1]=1;
p[1]=1;
For(i,2,N+1){
if(!p[i])p[i]=i,pr[++tot]=i,phi[i]=p[i]-1;
for(int j=1;j<=tot&&pr[j]*i<=N;j++){
p[i*pr[j]]=pr[j];
if(p[i]==pr[j]){
phi[i*pr[j]]=phi[i]*pr[j];
break;
}else phi[i*pr[j]]=phi[i]*(pr[j]-1);
}
}
For(i,1,N)
ans[i]=ans[i-1]+phi[i]/((i&1)+1);
}
int main()
{int t;
scanf("%d",&t);
init();
while(t--)
{
int n;
scanf("%d",&n);
printf("%lld\n",ans[n]);
}
return 0;
}