백준's 단계별 풀이

Stage_8 (기본수학2) 2581번 소수

푸른잎 뱅갈고무나무 2021. 3. 30. 15:54

 

문제 출처 : www.acmicpc.net/problem/2581

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

 

# M <= 소수 <= N  // 소수의 합과 이 중 최소값 Return

 

#소수 판별 함수 (문제 1978번 참조)

 

def Prime (n):

  if n < 2return False

  elif n==2return True

  else:

    for i in range(2,n):

      if n%i == 0 :

        return False

        break

    return True

 

# M,N이 주어짐

 

M = int(input())

N = int(input())

 

# 소수로 판별된 숫자들을 List에 저장

prime_list = []

 

for i in range(M, N+1):

  if Prime(i): prime_list.append(i)

 

# 소수가 없으면 -1 출력

 

if len(prime_list) == 0print(-1)

 

# 소수가 있으면

else : 

  print(sum(prime_list))

  # 소수 리스트의 합 출력

  print(min(prime_list))

  # 소수 리스트의 최소값 출력

 

 

Comments;  1) input을 줄바꿈으로 받으라고 했는데 space로 받는 것으로 코딩했더니 ValueError가 발생함.  2) 앞의 문제에서 소수 판별식을 함수로 짜놓았더니 문제 푸는 것이 훨씬 쉬움