문제
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
알고리즘
- 일반적으로 소수를 구하는 방법으로 구하게 되면 시간 복잡도가 O(n^2)이고 에라토스테네스의 체를 통해 구하게 되면 시간 복잡도가 O(log n)이다.
- 따라서 에라토스테네스의 체를 통해 소수를 구한다.
- 구한 소수가 범위 내에 있다면 출력한다.
코드
import sys
m, n = map(int, sys.stdin.readline().split())
dp = [False, False] + [True] * 1000001
primes = []
# 에라토스테네스의 체를 통해 소수를 구한다.
for i in range(2, n+1):
if dp[i]:
primes.append(i)
for j in range(i*2, n+1, i):
dp[j] = False
# 구한 소수가 범위 내에 있다면 출력
for i in primes:
if i > n:
break
if i >= m:
print(i)
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 1205번(파이썬): 등수 구하기 (0) | 2022.08.10 |
---|---|
[baekjoon] 백준 1063번(파이썬): 킹 (0) | 2022.08.09 |
[baekjoon] 백준 7568번(파이썬): 덩치 (0) | 2022.07.21 |
[baekjoon] 백준 4673번(파이썬): 셀프 넘버 (0) | 2022.06.28 |
[baekjoon] 백준 1504번(파이썬): 특정한 최단 경로 (0) | 2022.06.27 |