int N, M, D; int Not_Prime[Maxn + 100], Prime[Maxn + 100], Mu[Maxn + 100], cnt;
inlinevoidInit() { Not_Prime[0] = Not_Prime[1] = 1; Mu[1] = 1; for (int i = 2; i <= Maxn; ++i) { if (!Not_Prime[i]) { Prime[++cnt] = i; Mu[i] = -1; } for (int j = 1; j <= cnt && i * Prime[j] <= Maxn; ++j) { Not_Prime[i * Prime[j]] = 1; if (!(i % Prime[j])) break; Mu[i * Prime[j]] = -Mu[i]; } } for (int i = 2; i < Maxn; ++i) Mu[i] += Mu[i - 1]; }
inline LL Solve() { N /= D; M /= D; int last; if (N > M) swap(N, M); LL Ans = 0ll; for (int i = 1; i <= N; i = last + 1) { last = min(N / (N / i), M / (M / i)); Ans += 1LL * (Mu[last] - Mu[i - 1]) * (N / i) * (M / i); } return Ans; }