일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- JPA
- Python
- 파이썬
- 누적합
- BFS
- 그리디 알고리즘
- unity
- 소수판별
- 우선순위큐
- deque
- spring
- 연관관계
- appendleft
- python3
- pypy3
- mvc
- 소수찾기
- C#강의
- LCM
- 프로그래머스
- 합 구하기
- popleft
- 백준
- Java
- c#
- 1일1솔
- 브루투포스
- 완전탐색
- 인프런
- DP
Archives
- Today
- Total
jae_coding
(백준 알고리즘 문제풀이) 1456번 거의 소수 본문
반응형
문제
문제 접근
- 에라토스테네스의 체 알고리즘 사용
- 에라토스테네스 위키피디아
에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전
ko.wikipedia.org
코드
import sys
input = sys.stdin.readline
a, b = map(int, input().split())
result = 0
array = [True for _ in range(int(pow(b, 0.5)) + 1)]
# 에라토스테네스의 체 (10 ** 7까지 리스트 적용)
for i in range(2, int(pow(b, 0.5)) + 1):
if array[i]:
j = 2
while i * j <= int(pow(b, 0.5)):
array[i * j] = False
j += 1
for i in range(2, int(pow(b, 0.5))+1):
# 소수일 경우에 count제곱해준 값이 범위 내에 있을 경우
if array[i]:
count = 1
while True:
count += 1
if a <= pow(i, count) <= b:
result += 1
if pow(i, count) > b:
break
print(result)
이번 문제는 난이도가 높았다고 생각한다. 처음들어보는 알고리즘이라 그런가 시간이 오래걸린 편이었다. 에라토스테네스의 체 알고리즘의 시간복잡도는 O(NloglogN)으로 시간 초과를 막을 수 있었다.
반응형
'알고리즘 문제 > 백준' 카테고리의 다른 글
(백준 알고리즘 문제풀이) 21921번 블로그 (0) | 2022.07.27 |
---|---|
(백준 알고리즘 문제풀이) 11441번 합 구하기 (0) | 2022.07.27 |
(백준 알고리즘 문제풀이) 1978번 소수찾기 (0) | 2022.07.26 |
(백준 완전탐색 문제풀이) 15656번 N과 M (7) (0) | 2022.07.26 |
(백준 알고리즘 문제풀이)10989번 수 정렬하기 3 (0) | 2022.07.19 |
Comments