본문 바로가기
Algorithm/baekjoon

baekjoon 1929: 소수 구하기

by 갈잃자 2022. 8. 25.

https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

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

www.acmicpc.net


위 문제는 소수를 구하는 문제인데, 입력값이 1,000,000까지 존재하고, 제한시간이 2초 이므로, 시간적인 여유가 많이 없으므로 단순구현이 아닌 알고리즘이 필요하다. 

 

이에 내가 선택한 알고리즘은 에라토스테네스의 체 라는 알고리즘인데

 

해당 수까지 전체 for문을 돌며 소수임을 확인하는 것이 아닌, 작은수부터 for문을 돌려 소수를 찾고, 찾은 소수를 배수시키며 check해준다.

 

check된 수는 소수가 아니므로 for문을 돌 지 않아도 됨

 

따라서 시간적인 여유가 생김!

m,n = list(map(int,input().split()))
prime = []
check = [0]*(n+1)
for i in range(2,n+1):
    if not check[i]:
        prime.append(i)
    for j in range(i+i,n+1,i):
        check[j] = 1
for i in range(len(prime)):
    if m<=prime[i]<=n:
        print(prime[i])

'Algorithm > baekjoon' 카테고리의 다른 글

baekjoon 6588: 골드바흐의 추측  (1) 2022.09.13
baekjoon 4948: 베르트랑 공준  (0) 2022.08.31
baekjoon 2581: 소수  (0) 2022.08.23
baekjoon 1978: 소수 찾기  (0) 2022.08.21
baekjoon 2869: 달팽이는 올라가고 싶다  (1) 2022.08.20

댓글