M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
3 16
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)
범위의 모든 수를 넣으면서 소수이면서 에라토스테네스의 체로 걸러지고 남은 수인지를 확인
에라토스테네스의 체는 소수를 제외한 소수의 배수들을 제외하는 것입니다.