2025-03-31 17:17:27 -05:00

42 lines
861 B
C++

#include <iostream>
#include <vector>
std::vector<bool> sieve(int limit) {
std::vector<bool> is_prime(limit + 1, true);
is_prime[0] = is_prime[1] = false;
for (int i = 2; i * i <= limit; i++) {
if (is_prime[i]) {
for (int j = i * i; j <= limit; j += i) {
is_prime[j] = false;
}
}
}
return is_prime;
}
int main() {
int T;
std::cin >> T;
int limit = 20000000;
std::vector<bool> is_prime = sieve(limit);
std::vector<std::pair<int, int>> twin_primes;
for (int i = 2; i < limit - 2; ++i) {
if (is_prime[i] && is_prime[i + 2]) {
twin_primes.push_back({i, i + 2});
}
}
while (T--) {
int N;
std::cin >> N;
printf("%d %d\n", twin_primes[N - 1].first, twin_primes[N - 1].second);
}
return 0;
}