티스토리 뷰

728x90

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이 된다.

 

 

 


  • 풀이 :

소수인지 판별하는 isPrime() 함수를 구현하고 M부터 N까지 모든 수에 대해 소수판별 및 첫 번째 소수를 입력하였다.

소수의 합이 초기값일 경우 소수가 없으므로 -1을 출력하게 했다. 

 

1이 소수가 아니라는 예외처리를 해주지 않아 한 번 틀렸다. 주의해야겠다.

 

 

 


  • 소스코드 : 
def isPrime(n):
    if n == 1:
        return False
    for i in range(2,n):
        if n % i == 0:
            return False
    return True

N = int(input())
M = int(input())
answer = 0
minAnswer = M
first = True
for i in range(N,M+1):
    if isPrime(i):
        if first:
            minAnswer = i
            first = False
        answer += i
if answer == 0:
    print(-1)
    exit()
print(answer)
print(minAnswer)
320x100
댓글
© 2022 WonSeok, All rights reserved