[python] 백준 4134번

도덩이의 개발 일지·2024년 9월 21일

백준

목록 보기
92/131
post-thumbnail

안녕하세요 !

오늘은 백준 - 다음 소수 문제를 가지고 왔습니다.


문제 설명


해결 방법

문제를 해결한 방법을 정리해보겠습니다.

  1. 숫자의 개수와 개수만큼의 숫자를 입력 받습니다.
  2. 입력받은 숫자부터 최댓값까지 반복문을 돌리면서 가장 가까운 소수를 구해줍니다.

  1. 숫자의 개수와 개수만큼의 숫자를 입력 받습니다.
n = int(sys.stdin.readline().strip())
for i in range(n):
    answer = 0
    num = int(sys.stdin.readline().strip())

  1. 입력받은 숫자부터 최댓값까지 반복문을 돌리면서 가장 가까운 소수를 구해줍니다.

입력받은 숫자가 0이거나 1일 때 continue로 처리해줬습니다.

for i in range(num, (4 * (10 ** 9)) + 10):
    if i < 2:
        continue
    for j in range(2, int(math.sqrt(i)) + 1):
        if i % j == 0:
            break
    else:
        print(i)
        break

오류

이 문제를 풀었을 때 아래와 같이 계속 틀렸었는데요 !


그 이유를 알고 보니...

숫자가 최대(4 * 10^9)일 때 최댓값이랑 같거나 큰 소수는 4000000007이다.

그러면 2번째 for문의 범위가 입력받은 수부터 4000000008까지여야 하는데 4*10^9까지 만큼만 돌게 설정해놓아서 오류가 났습니다.


전체 코드

import sys
import math

n = int(sys.stdin.readline().strip())

for i in range(n):
    answer = 0
    num = int(sys.stdin.readline().strip())
    for i in range(num, (4 * (10 ** 9)) + 10):
        if i < 2:
            continue
        for j in range(2, int(math.sqrt(i)) + 1):
            if i % j == 0:
                break
        else:
            print(i)
            break
profile
말하는 감자에서 개발자로 ( ´͈ ᵕ `͈ )◞♡

0개의 댓글