mirae.kwak 2022. 3. 12. 13:43
728x90

https://www.acmicpc.net/problem/2581

 

2581번: 소수

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

www.acmicpc.net

 

Python3

if __name__ == '__main__':
    M = int(input())
    N = int(input())
    prime = []
    for number in range(M, N+1):
        is_sosu = 1
        if number == 1:
            continue
        for i in range(2, number):
            if number % i == 0:
                is_sosu = 0
                break
        if is_sosu:
            prime.append(number)
    if not prime:
        print(-1)
    else:
        print(sum(prime))
        print(min(prime))

입력받은 M부터 N까지 수를 돌면서 소수를 찾아 prime 리스트에 삽입했다. 소수 판별은 우선 수가 1일 경우 예외처리를 해주었고, 2부터 number-1까지의 수들로 나누어보면서 나누어진다면 소수가 아님으로 is_sosu변수 값을 0으로 저장했다. 반복문이 끝나고 is_sosu 변수를 보았을 때 소수라면 prime 리스트에 삽입했다.

만약 prime 리스트가 비어있다면 -1을 출력하고 아니라면 내장함수인 sum과 min을 사용해 소수의 합과 최소값을 출력했다. 

728x90