直接用筛法比先求出欧拉函数快
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
#include <string>
using namespace std;
const int maxn = 1000+10;
int phi[maxn];
void selEuler(int n, int* phi)
{
for(int i = 2; i <= n; i++)
phi[i] = 0;
phi[1] = 1;
for(int i = 2; i <= n; i++)
{
if(!phi[i])
{
for(int j = i; j <= n; j += i)
{
if(!phi[j]) phi[j] = j;
phi[j] = phi[j]/i*(i-1);
}
}
}
}
int main()
{
int t,n,ans;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
selEuler(n, phi);
ans = 0;
for(int i = 1; i <= n; i++)
ans += phi[i];
printf("%d\n",ans);
}
return 0;
}