题意:给出n,算出小于等于n的所有数中,有几对互质。
思路:我们用欧拉函数打个表就好了。
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#define MAXN 100010
#define MAXE 400
#define INF 100000000
#define MOD 10001
#define LL long long
#define pi 3.14159
using namespace std;
LL phi[MAXN];
LL sum[MAXN];
void phi_table(int n) {
memset(phi, 0, sizeof(phi));
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() {
std::ios::sync_with_stdio(false);
phi_table(50000);
LL ans = 0;
for (int i = 2; i <= 50000; ++i) {
ans += 2 * phi[i];
sum[i] = ans + 1;
}
int n;
while (cin >> n && n) {
if (n == 1) {
cout << 1 << endl;
} else {
cout << sum[n] << endl;
}
}
return 0;
}