에라토스테네스의 체를 이용한 문제
일차원 배열의 범위를 10^7까지 설정하는 것이 핵심
문제에서 제한 범위가 10^14인데, 제곱근을 찾으면 문제를 해결할 수 있기 때문
# 거의 소수
# 어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다.
# 두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다.
# 첫째 줄에 왼쪽 범위 A와 오른쪽 범위 B가 공백 한 칸을 사이에 두고 주어진다.
# 첫째 줄에 총 몇 개가 있는지 출력한다.
import math
m, n = map(int, input().split())
a = [0] * 10000001 # 시간복잡도를 위해 10^7까지만 수행 (문제 범위 10^14까지인데 제곱근만 찾으면 되기 때문)
for i in range(2, len(a)):
a[i] = i
for i in range(2, int(math.sqrt(len(a))) + 1): # 시간복잡도를 위해 제곱근까지만 수행
if a[i] == 0:
continue
for j in range(i + i, len(a), i):
a[j] = 0
cnt = 0
for i in a:
if i != 0:
tmp = i * i
while tmp <= n:
if tmp >= m:
cnt += 1
tmp *= i
print(cnt)
'Code > Python' 카테고리의 다른 글
[Python] 백준 1016 제곱 ㄴㄴ 수 (0) | 2023.10.25 |
---|---|
[Python] 백준 1747번 소수&팰린드롬 (0) | 2023.10.25 |
[Python] 백준 1929번 소수구하기 (0) | 2023.10.24 |
[Python] 백준 1541번 잃어버린 괄호 (0) | 2023.10.23 |
[Python] 백준 1931번 회의실 배정 (1) | 2023.10.23 |