import math
m = int(input())
n = int(input())
array = [True for i in range(n+1)] #1~n까지 소수
array[1] = False
lists = [] #정답을 담을 리스트
for i in range(2,int(math.sqrt(n))+1):
if array[i] == True:
j = 2
while i*j <= n:
array[i*j] = False
j+=1
for i in range(m,n+1):
if array[i] == True:
lists.append(i)
if len(lists) != 0:
print(sum(lists))
print(lists[0])
else: print(-1)
에라토네스 체를 써서 문제를 풀었다.
array[1] = False를 하지 않으면 반례 입력값 1 1 때문에 에러가 뜨므로 반드시 해줘야 한다
참고
소수 알고리즘
소수(prime number)란 2보다 큰 자연수 중에서 1과 자기 자신을 제외한 자연수로는 나누어 떨어지지 않는 자연수이다. 코딩테스트에서 숫자가 소수인지 판별하는 경우가 간혹 생기므로 정리해본다.
dongcoding.tistory.com
반응형
'PS > 백준 문제' 카테고리의 다른 글
백준 18310번 파이썬 문제풀이 (0) | 2021.10.30 |
---|---|
백준 1929번 파이썬 문제풀이 (0) | 2021.10.30 |
백준 2775번파이썬 문제풀이 (0) | 2021.10.27 |
백준 1316번 파이썬 문제풀이 (0) | 2021.10.09 |
백준 2941번 파이썬 문제풀이 (0) | 2021.10.09 |