728x90

문제) 자연수 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())
de = []
for i in range(m, n+1):
  check = 0
  for j in range(1, i+1):
    if i % j == 0: 
      check += 1
      if check > 2: break
  if check == 2: de.append(i)
if de == []: print(-1)
else: print(str(sum(de))+'\n'+str(min(de)))​

 

풀이 : 앞선 소수찾기 문제에서 코드를 더 추가하여 해결한 문제이다. (1978 - 소수 찾기) 만약 i가 소수일 경우 de리스트에 추가하여준다. 그 후 리스트내의 모든항목의 합과 최솟값을 출력해준다. 8번째줄에 있는 if문의 경우에는 큰 수를 계산해야할 때 시간이 오래걸리는 것을 방지하기 위한 코드이다.

 

'코딩 공부 > 파이썬' 카테고리의 다른 글

백준) 4948 - 베르트랑 공준 [파이썬 3]  (0) 2022.02.22
백준) 1929 - 소수 구하기  (0) 2022.02.22
백준) 1978 - 소수 찾기  (0) 2022.02.21
백준) 11653 - 소인수분해  (0) 2022.02.21
백준 기본수학 1 풀이 - 4  (0) 2022.02.08

+ Recent posts