这道题要找二元组(x, y) 满足1 <= x, y <= n 且x与y互素
那么我就可以假设x < y, 设这时答案为f(n)
那么答案就为2 * f(n) +1(x与y反过来就乘2,加上(1,1))
那么f(n)可以用欧拉函数求
显然f(n) = phi(2) + phi(3) + ……+phi(n)
#include<cstdio>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
const int MAXN = 51234;
int euler[MAXN], ans[MAXN], n;
void init()
{
REP(i, 1, MAXN) euler[i] = i;
REP(i, 2, MAXN)
if(euler[i] == i)
for(int j = i; j < MAXN; j += i)
euler[j] = euler[j] / i * (i - 1);
REP(i, 2, MAXN) ans[i] = ans[i-1] + euler[i];
}
int main()
{
init();
while(~scanf("%d", &n) && n)
printf("%d
", ans[n] * 2 + 1);
return 0;
}