백준

[백준] 4134 : 다음 소수 (Python/파이썬)

sson-coding 2025. 12. 14. 23:58

문제 링크

https://www.acmicpc.net/problem/4134

문제

정수 n(0 ≤ n ≤ 4*10^9)가 주어졌을 때, n보다 크거나 같은 소수 중 가장 작은 소수 찾는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다.

출력

각각의 테스트 케이스에 대해서 n보다 크거나 같은 소수 중 가장 작은 소수를 한 줄에 하나씩 출력한다.

예제

입력

3
6
20
100

출력

7
23
101

정답 및 풀이

import sys
import math

input = sys.stdin.readline

def is_prime(x):
    if x < 2:
        return False
    for i in range(2, int(x ** 0.5) + 1):
        if x % i == 0:
            return False
    return True

def next_decimal(num):
    while True:
        if is_prime(num):
            return num
        num += 1

t = int(input())
for _ in range(t):
    n = int(input())
    print(next_decimal(n))

  1. import sys
    • 빠른 입력을 사용하기 위해 sys 모듈을 불러온다.
  2. input = sys.stdin.readline
    • 기본 input() 대신 더 빠른 입력 방식을 사용한다.
  3. def is_prime(x):
    • 숫자 x가 소수인지 판별하는 함수를 정의한다.
  4. if x < 2:
    • 2보다 작은 수는 소수가 아니므로 예외 처리한다.
  5. return False
    • 소수가 아님을 의미하므로 False를 반환한다.
  6. for i in range(2, int(x ** 0.5) + 1):
    • 2부터 x의 제곱근까지 나누어 떨어지는지 검사한다.
  7. if x % i == 0:
    • x가 i로 나누어 떨어지는 경우를 확인한다.
  8. return False
    • 하나라도 나누어 떨어지면 합성수이므로 False를 반환한다.
  9. return True
    • 끝까지 나누어 떨어지지 않으면 소수이므로 True를 반환한다.
  10. def next_decimal(num):
    • num 이상에서 가장 작은 소수를 찾는 함수를 정의한다.
  11. while True:
    • 소수를 찾을 때까지 반복하기 위해 무한 반복문을 사용한다.
  12. if is_prime(num):
    • 현재 숫자가 소수인지 판별한다.
  13. return num
    • 소수라면 해당 숫자를 반환하고 함수를 종료한다.
  14. num += 1
    • 소수가 아니라면 다음 숫자로 이동한다.
  15. t = int(input())
    • 테스트 케이스의 개수를 입력받는다.
  16. for _ in range(t):
    • 테스트 케이스 수만큼 반복한다.
  17. n = int(input())
    • 각 테스트 케이스에서 기준 숫자 n을 입력받는다.
  18. print(next_decimal(n))
    • n 이상인 가장 작은 소수를 찾아 출력한다.