Study/알고리즘
[백준] 1929번_소수구하기
혤리
2020. 2. 9. 23:10
문제 링크 : https://www.acmicpc.net/problem/1929
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000)
www.acmicpc.net
def print_prime(i):
if i >= 2:
for k in range(2,int(i**0.5)+1):
if i%k==0:
return
print(i)
return
m,n = map(int,input().split())
for i in range(m,n+1):
print_prime(i)
isPrime 함수를 만들어서 True, False 반환한 다음에 main부분에서 출력해도 되지만 그냥 바로 출력하는 함수를 만들어보았다.
def sieve(n):
prime = []
check = [False for _ in range(n+1)] # 지워졌으면 True
i = 2
while i<=n:
if not check[i]:
prime.append(i)
j = i+i
while j<=n:
check[j] = True
j += i
i+=1
return prime
a,b = map(int,input().split())
prime_arr = sieve(b)
for p in prime_arr:
if a<=p<=b:
print(p)
에라토스테네스의 체를 이용하여 더욱 빠르게 문제를 해결했다.