BAEKJOON/수학
백준 4134번 [다음 소수](C++) -yes6686- 티스토리
yes6686
2025. 1. 13. 19:43
728x90
반응형
SMALL
백준 문제 풀이: 4134 [다음 소수]
문제 링크: https://www.acmicpc.net/problem/4134
문제 설명:
입력으로 주어진 정수 n
에 대해, n
이상인 첫 번째 소수를 출력하는 문제입니다. 여러 개의 테스트 케이스를 처리해야 하며, 소수 판별은 효율적으로 수행해야 합니다.
문제 해결 코드
#include <iostream>
using namespace std;
// 소수 판별 함수
bool is_prime(long long n) {
if (n <= 1) return false; // 1 이하의 숫자는 소수가 아님
for (long long i = 2; i * i <= n; i++) {
if (n % i == 0) return false; // 약수가 존재하면 소수가 아님
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int T; // 테스트 케이스 수
cin >> T;
while (T--) {
long long n;
cin >> n;
// n 이상인 첫 번째 소수를 찾음
while (!is_prime(n)) {
n++;
}
cout << n << '\n'; // 결과 출력
}
return 0;
}
예제 입력:
3
6
20
100
예제 출력:
7
23
101
코드 설명
- 핵심 알고리즘: 주어진 수 이상인 소수를 효율적으로 찾기 위해 소수 판별 알고리즘을 사용합니다.
- 구현 세부사항:
is_prime
함수는 주어진 숫자가 소수인지 판별합니다. 숫자i
를 2부터 √n까지 검사하여 약수가 있는지 확인합니다.- 입력된 수
n
이 소수가 아니라면, 1씩 증가시키며 첫 번째 소수를 찾습니다.
- 시간 복잡도:
- 소수 판별: O(√n)
- 최악의 경우: O(T ⋅ √n), 여기서 T는 테스트 케이스 수입니다.
결과
입력된 각 테스트 케이스에 대해, 주어진 정수 이상인 첫 번째 소수를 정확히 출력합니다. 이 문제는 소수 판별 및 반복 처리의 효율성을 연습하기에 적합합니다. 추가적인 질문이나 개선 사항이 있다면 댓글로 알려주세요!
728x90
반응형
LIST