dp[i] = 最大公约数是i的(x,y)点对个数
dp[i] = dp[i] - dp[i * 2] - dp[i * 3] … 容斥掉即刻。
最后补上(0,1)和(1,0)两个点
复杂度nlogn
int solve(int tc) {
// memset(dp, 0, sizeof dp);
int n;
cin >> n;
for (int i = n; i >= 1; i--) {
dp[i] = (n / i) * (n / i);
for (int j = i + i; j <= n; j+=i) {
dp[i] -= dp[j];
}
}
cout << tc << " " << n << " " << dp[1] + 2 << "\n";
return 0;
}