这里还需补充一点,一个数与本身互质,但是本身与本身本来只算一个数对
代码:
#include <bits/stdc++.h>
// #define LOCAL
#define INF 0x3f3f3f3f3f3f3f3f
#define IOS ios::sync_with_stdio(false), cin.tie(0)
// #define int long long
#define debug(a) cout << #a << "=" << a << endl;
using namespace std;
vector<int> phi(1e7 + 5);
vector<long long> s(1e7 + 5);
vector<int> vis(1e7 + 5, 0);
int primes[10000005], cnt;
int n;
void get_phi(){
phi[1] = 1;
for (register int i = 2; i <= n; ++i){
if(vis[i] == 0){
vis[i] = i, primes[++cnt] = i;
phi[i] = i - 1;
}
for (int j = 1; j <= cnt; ++j){
if(primes[j] > vis[i] || primes[j] > n / i)
break;
vis[i * primes[j]] = primes[j];
phi[i * primes[j]] = phi[i] * (i % primes[j] ? primes[j] - 1 : primes[j]);
}
}
}
signed main(){
#ifdef LOCAL
freopen("input.in", "r", stdin);
freopen("output.out", "w", stdout);
#endif
IOS;
cin >> n;
get_phi();
for (int i = 1; i <= n; ++i)
s[i] = s[i - 1] + phi[i];
long long ans = 0;
for (int i = 1; i <= cnt; ++i){
int k = n / primes[i];
ans += s[k] * 2 - 1;
}
cout << ans << '\n';
}