// WA #include #include constexpr int M = 1000010; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n; std::cin >> n; std::vector w(2 * M + 1); for (int i = 0; i < n; ++i) { int a, b; std::cin >> a >> b; ++w[M + a + 1]; --w[M + b + 1]; --w[M + a - b + 1]; } // accumulate for (int i = 0; i < 2 * M; ++i) { w[i + 1] += w[i]; } std::vector s(M + 1); s[0] = w[M]; for (int i = 1; i <= M; ++i) { s[i] = w[M - i] + w[M + i]; } // zeta transform { std::vector is_prime(M + 1, true); for (int p = 2; p <= M; ++p) { if (not is_prime[p]) continue; int q = M / p; for (; q >= p; --q) { is_prime[p * q] = false; s[q] += s[p * q]; } for (; q >= 1; --q) { s[q] += s[p * q]; } } } int max_f = 0, argmax = 0; for (int m = 1; m <= M; ++m) { int f_m = 1LL * -n * (M / m) - s[0] - s[m]; if (f_m > max_f) { max_f = f_m; argmax = m; } } std::cout << argmax << '\n'; }