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 |
댓글