[파이썬] 백준 - 1929번

SMongS·2023년 1월 5일
1

CodingTest

목록 보기
40/49

소수 구하기

문제

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

출력

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

예제 입력 1

3 16

예제 출력 1

3
5
7
11
13

코드

m, n = map(int, input().split())

lst = [False, False] + ([True] * 999999)

def isPrime(i):
    for j in range(2, i**(1//2) + 1):
        if i % j == 0:
            return False
    return True

for i in range(2, 1000001):
    if lst[i] and isPrime(i):
        for h in range(i*2, 1000000, i):
            lst[h] = False

for i in range(m,n+1):
    if lst[i]:
        print(i)

리스트에서 0과 1은 의미가 없기에 False 처리

isPrime()은 소수 인지 판별
제곱근 식을 사용해서 시간 복잡도 O(√n)

범위의 모든 수를 넣으면서 소수이면서 에라토스테네스의 체로 걸러지고 남은 수인지를 확인

에라토스테네스의 체는 소수를 제외한 소수의 배수들을 제외하는 것입니다.

profile
반갑습니당~😄

0개의 댓글