본문 바로가기
IT/알고리즘

[BAEKJOON] 백준 2581: 소수 (Python)

by 무녈 2021. 8. 31.

문제 링크: https://www.acmicpc.net/problem/2581

 

2581번: 소수

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

www.acmicpc.net


문제

자연수 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을 출력한다.


코드

M = int(input()) 
N = int(input())
prime_list = []
for num in range(M, N+1):
    no_prime = 0
    if num > 1:
        for i in range(2, num):
            if num % i == 0:
                no_prime += 1
                break
        if no_prime == 0:
            prime_list.append(num)
if len(prime_list) > 0:
    print(sum(prime_list))
    print(min(prime_list))
else:
    print(-1)

문제 요약

  1. 숫자들의 범위가 주어졌을 때, 범위 내 소수들의 합과 최소값을 구하고, 소수가 없을 경우 -1을 출력하는 문제이다.

코드 설명

  1. 숫자 범위에서 시작하는 숫자의 변수 M, 마지막 숫자의 변수 N을 선언하고 각각 숫자들을 입력받는다.
  2. 소수들의 리스트를 만들기 위해 prime_list 변수에 빈 리스트를 선언한다.
    M = int(input()) 
    N = int(input())
    prime_list = []​
  3. 첫 번째 for문을 통해 주어진 숫자들이 하나씩 num 변수에 할당된다. 이때 for문 내에서 소수가 아닌 숫자를 판단하기 위한 no_prime 변수를 선언한다.
  4. 소수는 1을 초과하는 숫자로, 두 번째 for문을 통해 2부터 num -1 까지 반복하여 num을 나누었을 때 나머지가 0이 발생하는 경우 no_prime을 1 증가하고, break를 통해 for문을 종결한다.
  5. no_prime 변수가 0인경우 소수 리스트 prime_list에 입력한다.
        if num > 1:
            for i in range(2, num):
                if num % i == 0:
                    no_prime += 1
                    break
            if no_prime == 0:
                prime_list.append(num)​
  6. 소수가 담긴 리스트의 길이가 0을 초과하는 경우 각각 리스트의 합과 리스트의 최소값을 출력하고, 리스트의 길이가 0인경우 -1을 출력한다.
    if len(prime_list) > 0:
        print(sum(prime_list))
        print(min(prime_list))
    else:
        print(-1)​
반응형

댓글