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을 출력한다.
과정
- 배열의 첫번째 값과 마지막 값을 입력받는다.
- 소수를 찾아서 합과 최솟값을 출력한다.
예제 입력
60
100
예제 출력
620
61
풀이
first = int(input())
last = int(input())
arr = []
for num in range(first, last+1):
cnt = 0
if num > 1:
for i in range(2, num):
if num % i == 0:
cnt += 1
break
if cnt == 0:
arr.append(num)
if len(arr) > 0:
print(sum(arr))
print(min(arr))
else:
print(-1)
한 줄씩 해석해보기
first = int(input())
last = int(input())
arr = []
- 배열의 시작과 끝 점을 입력받는다.
- 배열을 저장할 리스트를 생성한다.
for num in range(first, last+1):
cnt = 0
if num > 1:
for i in range(2, num):
if num % i == 0:
cnt += 1
break
if cnt == 0:
arr.append(num)
- 각 숫자가 1보다 크면 2 ~ 해당 숫자 전까지의 숫자로 나누었을때 나머지가 0이라면 cnt 값을 올려준다.
- cnt 값이 0이면 소수이기 때문에 arr 리스트에 저장한다.
if len(arr) > 0:
print(sum(arr))
print(min(arr))
else:
print(-1)
- arr의 길이가 0보다 크면 합과 최소값을 출력한다.
- 그렇지 않다면 -1을 출력한다.
'코딩 테스트 (Python) > 백준' 카테고리의 다른 글
[백준] 5397번 키로거 (Python) (1) | 2024.01.08 |
---|---|
[백준] 14888번 연산자 끼워넣기 (Python) (0) | 2024.01.06 |
[백준] 1292번 쉽게 푸는 문제 (Python) (0) | 2024.01.06 |
[백준] 1978번 소수 찾기 (Python) (0) | 2024.01.06 |
[백준] 필수 문제 풀이 모음 (1) | 2024.01.06 |