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;
}