42 lines
861 B
C++
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;
|
|
}
|