반응형
import math
m = int(input())
n = int(input())
num = [True for i in range(10001)]
num[0] = False
num[1] = False
for i in range(2, int(math.sqrt(n))+1): # 어차피 약수는 대칭이므로 n의 제곱근까지만 확인
if num[i] == True:
j = 2
while i * j <= n:
num[i*j] = False
j += 1
answer = []
for i in range(m, n+1):
if num[i] == True:
answer.append(i)
if len(answer) > 0:
print(sum(answer))
print(answer[0])
else:
print(-1)
에라토스테네의 체.. 뭔 이름이 이따구?
원리는 다음과 같다
- 2부터 N까지 존재하는 모든 자연수를 나열한다.
- 나열된 숫자 중에서 가장 작은 수를 x로 지정한다.
- 나열된 숫자 중에서 x의 배수를 모두 제거한다. (이때, x는 제거하지 않음)
- 더 이상 반복할 수 없을 때까지 2번과 3번을 반복한다.
이렇게 해서 남은 것들은 소수이다!
+ 0, 1은 소수가 아니므로 따로 제외해주기
math.sqrt() 제곱근 구하기
반응형
'취준 > 코딩테스트' 카테고리의 다른 글
백준 28278 (python): 스택 2 (0) | 2024.06.18 |
---|---|
백준 1292 (python): 쉽게 푸는 문제 (0) | 2024.04.11 |
백준 1406 (python): 에디터 (0) | 2024.04.11 |
백준 3273 (python): 두 수의 합 (0) | 2024.04.10 |
백준 10808 (python): 알파벳 개수 (0) | 2024.04.10 |