오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-09 15:52
관리 메뉴

우노

[Prime Number] 백준 1929번 “소수 구하기” Python 풀이 본문

Algorithm/Prime Number

[Prime Number] 백준 1929번 “소수 구하기” Python 풀이

운호(Noah) 2022. 10. 3. 21:42

문제 링크

풀이

  • 에라토스테네스의 체를 이용해야하는 대표적인 문제입니다.
  • m의 값이 최소 1인 것을 주의해야하며,
  • n의 값이 최대 1000000인 것을 주의해야합니다.
  • 또한, 소수 탐색 시, n의 제곱근까지만 탐색을 진행한다면 실행 시간을 단축시킬 수 있습니다.

코드

import sys
import math

# m과 n 입력
m, n = map(int, sys.stdin.readline().split())

# 소수 판별 결과를 저장하기 위한 리스트 초기화
# 처음에는 모든 수가 소수인 것으로 초기화
array = [True] * (1000001)

# 1은 소수가 아님
array[1] = False

# 2부터 n의 제곱근까지 에라토스테네스의 체 진행
for i in range(2, int(math.sqrt(n))+1):
    # i가 아직 남아있는 소수인 경우
    if array[i] == True:
        # i를 제외한 i의 모든 배수를 제거하기
        j = 2
        while i * j <= n:
            array[i * j] = False
            j += 1

# m 이상 n 이하의 소수를 모두 출력
for i in range(m, n+1):
    if (array[i] == True):
        print(i)
Comments