( •̀ ω •́ )✧
BOJ 1456. 거의 소수 본문
🔎 BOJ 1456. 거의 소수 (골드5)
https://www.acmicpc.net/problem/1456
1456번: 거의 소수
어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다. 두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다.
www.acmicpc.net
💡 SOL
import sys
import math
A, B = map(int, sys.stdin.readline().split())
# 범위 2 ~ B**(1/2)
S = 2
E = int(B ** (1/2))
# S~E까지 소수 찾기 - 에라토스테네스의 체
sosu = [i for i in range(E+1)]
sosu[1] = 0
idx = 2
while idx <= E:
if sosu[idx] != 0:
n = 2
while (idx * n) <= (E/2):
sosu[idx * n] = 0
n += 1
idx += 1
# A ~ B 전체 count 에서 +하면서 for문
# 중복 신경 안 써도 됨 (소수의 n승이기 때문에)
cnt = 0
for s in list(set(sosu)):
if s != 0:
n = math.ceil(math.log(A, s))
if n < 2:
n = 2
while s ** n <= B:
cnt += 1
n += 1
print(cnt)
💭 TIL
...
sosu = [i for i in range(E+1)]
sosu[1] = 0
idx = 2
while idx <= E:
if sosu[idx] != 0:
n = 2
while (idx * n) <= (E/2):
sosu[idx * n] = 0
n += 1
idx += 1
...
- 범위가 주어진 경우 소수 판별 (에라토스테네스의 체)
- A ~ B의 범위가 주어졌을 때, 해당 범위 내의 소수를 판별하기 위해
[:B]
의 리스트를 생성 s = 2
부터 x 2, x 3, x 4 … x n 하여 나온 값을 리스트에서 지움 (해당 값은 약수가 있는 수, 즉 소수가 아니기 때문)x n
한 값이 B를 초과하지 않을 때까지 반복s += 1
하여 다음 s를 처리- (2 ~ 4)의 과정을
s <= (B / 2)
조건 만족 시 까지만 반복한다.
- A ~ B의 범위가 주어졌을 때, 해당 범위 내의 소수를 판별하기 위해
'🤖 알고리즘' 카테고리의 다른 글
BOJ 16118. 달빛 여우 (Python) / 다익스트라 (0) | 2023.08.31 |
---|---|
BOJ 1789. 수들의 합 (0) | 2023.08.10 |
BOJ 2800. 괄호 제거 (0) | 2023.03.29 |
BOJ 14502. 연구소 (0) | 2023.03.23 |
SWEA 1959 (0) | 2022.07.20 |
Comments