Submission

Status:

PPPPPPPPPPPPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: Kittipon

Problemset: จำนวนเฉพาะก่อนหน้า

Language: cpp

Time: 0.003 second

Submitted On: 2025-10-05 11:38:33

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>

// ฟังก์ชันสำหรับตรวจสอบว่าเป็นจำนวนเฉพาะหรือไม่ (Optimized)
bool is_prime(int num) {
    if (num <= 1) {
        return false;
    }
    if (num == 2) {
        return true;
    }
    if (num % 2 == 0) {
        return false;
    }
    
    // วนลูปเช็คตัวหารเฉพาะเลขคี่ โดยเริ่มจาก 3
    // และเช็คถึงแค่รากที่สอง (square root) ของตัวเลขนั้น
    int limit = sqrt(num);
    for (int i = 3; i <= limit; i += 2) {
        if (num % i == 0) {
            return false;
        }
    }
    
    return true;
}

int main() {
    // เพิ่มความเร็วในการรับและแสดงผลข้อมูล
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);

    int n;
    std::cin >> n;

    // ใช้ vector สำหรับเก็บจำนวนเฉพาะที่พบ
    std::vector<int> found_primes;
    
    // เริ่มตรวจสอบตัวเลขตั้งแต่ N - 1 ลดลงไป
    int current_number = n - 1;

    // วนลูปจนกว่าจะเจอจำนวนเฉพาะครบ 5 ตัว
    while (found_primes.size() < 5) {
        if (is_prime(current_number)) {
            // ถ้าเป็นจำนวนเฉพาะ ให้เพิ่มเข้าไปใน vector
            found_primes.push_back(current_number);
        }
        current_number--;
    }

    // พลิกกลับลำดับของ vector เพื่อให้เรียงจากน้อยไปมาก
    std::reverse(found_primes.begin(), found_primes.end());

    // แสดงผลลัพธ์
    for (int i = 0; i < found_primes.size(); ++i) {
        std::cout << found_primes[i] << (i == found_primes.size() - 1 ? "" : " ");
    }
    std::cout << std::endl;

    return 0;
}