大意不再赘述。
思路:两两不能约分,即找(X,Y)两两互素的对数,所以求得欧拉函数值之后需要乘以2,而且(1,1)这个特殊的值也算一个,结果即为phi[n]*2+1。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long LL;
const int MAXN = 1010;
LL phi[MAXN];
int times;
int n;
void init()
{
for(int i = 1; i < MAXN; i++) phi[i] = 0;
phi[1] = 1;
for(int i = 2; i < MAXN; i++) if(!phi[i])
{
for(int j = i; j < MAXN; j += i)
{
if(!phi[j]) phi[j] = j;
phi[j] = phi[j] / i * (i-1);
}
}
for(int i = 2; i < MAXN; i++) phi[i] += phi[i-1];
}
void solve()
{
scanf("%d", &n);
LL ans = phi[n]*2 + 1;
printf("%d %d %lld\n", ++times, n, ans);
}
int main()
{
init();
int T;
times = 0;
scanf("%d", &T);
while(T--)
{
solve();
}
return 0;
}