요구사항
- M 이상 N이하의 소수를 한 줄에 하나씩 출력해라.
설계
- M과 N 을 입력 받는다.
- M과 N 사이의 수들 중 소수인지 아닌 지 판별하여 소수만 출력한다.
실수 1 [의도와 다른 결과값 출력]
import sys, math
input = lambda: sys.stdin.readline().rstrip()
M, N = map(int, input().split())
def isPrime(number):
if number < 2:
return 2
for i in range(2, int(math.sqrt(number)) + 1):
if number % i == 0:
return
return True
for i in range(M,N+1):
print(isPrime(i))
# 입력
3 16
# 출력
3
None
5
None
7
None
None
None
11
None
13
None
None
for i in range(M,N):
if isPrime(i) == None:
continue
print(isPrime(i))
- 해결했지만 찝찝하다. 다른 방법이 없나 pt 형님께 여쭤본다.
for i in range(M,N):
if isPrime(i):
print(i)
- isPrime(i) 일 경우에만 print(i) 해준다.
실수 2 [잘못된 의도]
def isPrime(number):
if number < 2:
return 2
for i in range(2, int(math.sqrt(number)) + 1):
if number % i == 0:
return False
return True
- 함수 판별하는 함수 로직 중 if number < 2: return 2를 하게 되어 있다.
- 0과 1은 소수가 아니므로 retrun False 를 할 수 있도록 하자.
정답 답안 예시
import sys, math
input = lambda: sys.stdin.readline().rstrip()
M, N = map(int, input().split())
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
for i in range(M,N+1):
if isPrime(i):
print(i)