题目来源 https://www.luogu.org/problem/show?pid=2158
可以观察到若行和列的标号互素,则可以观察到。
第i行可观察到的人数是phi(i)的两倍。
先构造欧拉函数表,再对数据进行处理。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <sstream>
#include <cstdio>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;
int phi[1000000];
void phi_table(int n) {
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 sum[40001] = {0};
int main() {
phi_table(40001);
for (int i = 1; i <= 40001; i++)sum[i] = sum[i - 1] + phi[i];
int n;
cin >> n;
cout << sum[n - 1] * 2 + 1;
return 0;
}