문제📖
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F39262ce4-cf5f-4590-9256-46ce813b8d47%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-06-10%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.45.57.png)
풀이🙏
- 입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.
- M은 N보다 작거나 같다.
- M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.
- 단, M이상 N이하의 자연수 주 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
-> 에라토스테네스의 체
이론을 이용하여 구현하였다.
코드💻
import sys
def eratos(s, n):
sieve = [1] * (n + 1)
for i in range(2, int(n ** 0.5) + 1):
if sieve[i]:
for j in range(i * 2, n + 1, i):
sieve[j] = 0
return [i for i in range(2, n + 1) if sieve[i] and i >= s]
def sosu(start, end):
l = eratos(start, end)
if len(l) == 0:
return -1
return '\n'.join(map(str, [sum(l), l[0]]))
if __name__ == '__main__':
M = int(sys.stdin.readline())
N = int(sys.stdin.readline())
print(sosu(M, N))
결과😎
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F532700ad-a3c0-4f97-ad7a-27c8a5e00199%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-06-10%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2012.10.39.png)
출처 && 깃허브📝
https://www.acmicpc.net/problem/2581
github