< 과제 >
[ 문제 ]
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.
[ 입력 ]
입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.
[ 출력 ]
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
[ 예제 입력 1 ]
60
100[ 예제 출력 1 ]
620
61[ 예제 입력 2 ]
64
65[ 예제 출력 2 ]
-1
< 내 코드 >
M = int(input())
N = int(input())
result = []
for num in range(M, N+1):
if num == 1: # 1은 소수가 아님
pass
else:
flag = 0 # 약수 존재 여부 플래그
for j in range(2, num):
if num % j == 0: # 약수가 하나라도 있다면 반복 중단
flag += 1 # 약수가 존재한다는 의미
break
if flag == 0: # 약수가 없다면 결과 리스트에 저장
result.append(num)
# 결과 리스트 길이에 따라 출력형태가 달라짐
if len(result) > 0:
print(sum(result))
print(result[0]) # 순서대로 반복했으므로 가장 작은 수는 첫 번째에 위치한 수
else:
print(-1)
< 피드백 >
< 출처 >