728x90
반응형
문제요약 (1929. 소수 구하기 )
M 이상 N 이하의 소수를 모두 구해 출력한다.
소수를 구하는 여러가지 방법 중 에라토스테네스의 체를 이용해 구해보자
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
풀이를 위한 부연 설명
- 에라토스테네스의 체의 원리
- 구하고자 하는 소수의 범위만큼 1차원 리스트를 생성
- 2부터 숫자를 시작해 숫자가 지워지지 않은 경우 현재 선택된 숫자의 배수에 해당하는 수를 탐색하며 지운다.
단, 처음 선택된 수는 지우지 않는다. - 리스트를 반복한다.
- n = a * b ( a > b) 라는 것은 n = b * a와 같다.
- 즉 n의 제곱근까지만 탐색하면 ( = 절반만 탐색 ) 모든 수를 탐색한다.
- 소수판별에 대한 자세한 개념 설명과 연관 문제는 다음 링크를 참고하면 된다.
[코테 알고리즘] 소수 판별&투 포인터 / 관련 문제
소수 판별 에라토스테네스의 체 import math # 2부터 1000까지의 모든 수에 대하여 소수 판별 n = 1000 array = [True for i in range(n+1)] # 에라토스테네스의 체 알고리즘 수행 # 2부터 n 제곱근까지의 모든 수
daradarav.tistory.com
코드
import sys
input = sys.stdin.readline
from math import sqrt
start, end = map(int, input().split())
num = [i for i in range(end + 1)]
num[0] = 0
num[1] = 0
for i in range(2, int(sqrt(end)) + 1):
if num[i] == 0:
continue
for j in range(i + i, end + 1, i):
num[j] = 0
for i in range(start, end + 1):
if num[i] != 0:
print(num[i])
기억할 점
- 에라토스테네스의 체는 코딩테스트에서 소수를 판단할 때 자주 쓰인다.
반응형
'코딩 테스트 > 파이썬 문제 풀이' 카테고리의 다른 글
[백준] 1717번 파이썬 - 유니온파인드 (0) | 2024.01.17 |
---|---|
[백준] 1325번 파이썬 - 그래프(BFS), 시간 초과 해결 (2) | 2024.01.16 |
[백준] 1541번 파이썬 - 그리디 (0) | 2024.01.15 |
[백준] 1744번 파이썬 - 그리디 (1) | 2024.01.15 |
[백준] 1715번 파이썬 - 그리디 (0) | 2024.01.15 |