i ∈ [1, n]
i ∈ [1, m]
求 [(i, j) = 1] 的和
#include <bits/stdc++.h>
#define N 100010
typedef long long ll;
using namespace std;
int p[N], mu[N], cnt;
bool v[N];
int sum[N];
void init() {
v[1] = mu[1] = 1;
for (int i = 2; i <= N; i++) {
if (!v[i]) {
cnt++;
p[cnt] = i;
mu[i] = -1;
}
for (int j = 1; j <= cnt; j++) {
if (i * p[j] > N) break;
v[i * p[j]] = 1;
mu[i * p[j]] = (i % p[j] == 0) ? (0) : (-mu[i]);
if (i % p[j]) break;
}
}
}
ll calc(ll n, ll m) {
ll ans = 0;
for (int l = 1, r = 0; l <= min(n, m); l = r + 1) {
r = min(n / (n / l), (m / (m / l)));
ans += 1ll * (sum[r] - sum[l - 1]) * (n / l) * (m / l);
}
return ans;
}
int main() {
init();
for (int i = 1; i <= N; i++)
sum[i] = sum[i - 1] + mu[i];
ll n, m;
cin >> n >> m;
cout << calc(n, m);
}