요구사항
- 각각 테스트 케이스에 대해서 N보다 같거나 큰 소수 중 가장 작은 소수를 한 줄에 하나씩 출력할 것.
설게
- 주어진 N이 소수인지 아닌지 판별한다.
- 맞다면 N 출력
- 아니라면 N을 1씩 키워 소수인지 판별한다.
실수 과정 1. [TypeError]
def isPrime(number):
count = 0
for i in range(math.sqrt(number)):
if number // i == 0:
count +=1
if count == 1: return True
else: return False
for i in range(int(math.sprt(number))
실수 과정 2. [ZeroDivisionError]
def isPrime(number):
count = 0
for i in range(int(math.sqrt(number))):
if number // i == 0:
count +=1
if count == 1: return True
else: return False
- number // i == 0 에서 i 가 0부터 시작하기 때문에 위와 같은 오류가 생긴다.
- 추가로 number // i == 0 이 아니라 number % i == 0: 이 맞다...
실수 과정 3. [Trackback]
- 이 부분은 왜 오류가 나는 지 모르겠어서 피티형님께 여쭤봤다.
- 무한 재귀 호출: makePrim 함수는 현재 isPrime 함수가 참이 될 때까지 계속해서 재귀 호출을 수행합니다. 하지만 makePrim 함수 안에서 재귀 호출 후 아무것도 반환하지 않기 때문에 무한 루프에 빠질 가능성이 있습니다.
정답 답안 예시
import sys, math
input = lambda: sys.stdin.readline().rstrip()
N = int(input()) # 입력 개수 N
prime = [int(input()) for _ in range(N)] # N개의 입력 숫자 리스트
def isPrime(number):
if number < 2:
return False
for i in range(2, int(math.sqrt(number)) + 1):
if number % i == 0:
return False
return True
def makePrime(number):
if number <= 1: # 0 또는 1은 2로 처리
return 2
while not isPrime(number): # 소수가 나올 때까지 반복
number += 1
return number
for i in prime:
if isPrime(i):
print(i)
else:
print(makePrime(i)) # 소수가 아닌 경우 가장 가까운 소수를 출력
- 추가로 0과 1은 소수가 아니라고 본다. (이 부분 때문에 고생 좀 했다. )