#include <iostream>
#include <vector>
using namespace std;

// Hàm sàng nguyên tố - sử dụng Sieve of Eratosthenes để tìm tất cả các số nguyên tố <= n
vector<int> sieve(int n) {
    vector<bool> is_prime(n + 1, true);
    vector<int> primes;

    is_prime[0] = is_prime[1] = false;  // 0 và 1 không phải là số nguyên tố

    for (int i = 2; i <= n; i++) {
        if (is_prime[i]) {
            primes.push_back(i);  // Nếu i là số nguyên tố, thêm vào danh sách
            for (int j = i * 2; j <= n; j += i) {
                is_prime[j] = false;  // Đánh dấu các bội số của i là không phải số nguyên tố
            }
        }
    }

    return primes;  // Trả về danh sách các số nguyên tố
}

// Hàm tìm và in các cặp (i, j) sao cho i + j = 5
void findPairsWithSum5(int n) {
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j++) {
            if (i + j == 5) {
                cout << "(" << i << ", " << j << ")" << endl;
            }
        }
    }
}

int main() {
    int n;
    cout << "Nhập n: ";
    cin >> n;

    // Gọi hàm sàng nguyên tố và in kết quả
    vector<int> primes = sieve(n);
    cout << "Các số nguyên tố <= " << n << " là: ";
    for (int prime : primes) {
        cout << prime << " ";
    }
    cout << endl;

    // Tìm các cặp có tổng bằng 5
    cout << "Các cặp (i, j) có tổng bằng 5 là: " << endl;
    findPairsWithSum5(n);

    return 0;
}