#include #include #include #include #include #include #include #include #include static const int MOD = 1000000007; using ll = long long; using u32 = unsigned; using u64 = unsigned long long; using namespace std; template constexpr T INF = ::numeric_limits::max()/32*15+208; vector get_prime(int n){ if(n <= 1) return vector(); vector is_prime(n+1, true); vector prime; is_prime[0] = is_prime[1] = 0; for (int i = 2; i <= n; ++i) { if(is_prime[i]) prime.emplace_back(i); for (auto &&j : prime){ if(i*j > n) break; is_prime[i*j] = false; if(i % j == 0) break; } } return prime; } int main() { int n; cin >> n; if(n == 1){ puts("1"); return 0; } auto p = get_prime(100100); int cur = 0; while(p[cur] <= 100000) cur++; vector v; for (int i = cur; i < p.size(); ++i) { for (int j = i; j < p.size(); ++j) { v.emplace_back((ll)p[i]*p[j]); } } sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); cout << v[n-2] << "\n"; return 0; }