백준 BaekJoon Online Judge // 2581

2021. 1. 20. 18:11Programming/BOJ

백준 알고리즘 BaekJoon Online Judge 2581번 "소수" 문제입니다.

A = int(input())
B = int(input())

a = [False,False] + [True]*(B-1) 
primes=[] 
for i in range(2,B+1): 
  if a[i]: 
    primes.append(i) 
    for j in range(2*i, B+1, i):
      a[j] = False

lst = [x for x in primes if x >= A]
if len(lst) > 0:
  print(sum(lst))
  print(lst[0])
else:
  print(-1)

이것도 역시 에라스토테네스의 체를 사용해야 하는 문제다. 수의 범위가 10000이하기 때문에 더욱 더 사용해야 한다.

 

그리고 만든 소수 리스트를 입력받은 수의 범위로 필터링을 해서 새로운 리스트에 담는다.

 

필터링을 하였을 때 새로운 리스트의 길이가 0일 경우는 조건에 맞는 수가 없는 것이므로 -1을 출력하고

 

아닐 경우는 리스트의 합을 출력하고 리스트의 맨 앞의 값을 출력한다.

 

애초에 정렬된 소수 리스트로 필터링을 한 것이기 때문에 맨 앞의 값을 그대로 불러오면 된다.