티스토리 뷰

알고리즘 공부/백준

백준 1456번

_Yunhwan 2022. 10. 29. 00:53

https://www.acmicpc.net/problem/1456

 

1456번: 거의 소수

어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다. 두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다.

www.acmicpc.net

import math

a,b =map(int,input().split())
array = [1 for i in range(int(math.sqrt(b)) + 1)] # 처음엔 모든 수가 소수(1)인 것으로 초기화
almost_prime =[]
cnt=0

# 에라토스테네스의 체 알고리즘 
for i in range(2, int(math.sqrt(b)) + 1): # 2부터 n의 제곱근까지의 모든 수를 확인하며
    if array[i] == 1: # i가 소수인 경우 (남은 수인 경우)
        # i를 제외한 i의 모든 배수를 지우기
        j = 2 
        while i * j <= int(math.sqrt(b)):
          #소수가 아닌 수 설정
            array[i * j] = 0  
            j += 1

for i in range(2, int(math.sqrt(b)) + 1): # 2부터 n의 제곱근까지의 모든 수를 확인하며
    if array[i] == 1: # i가 소수인 경우 (남은 수인 경우)  
        j = 2 
        # i를 제외한 i의 제곱을 세주기
        while i**j <= b :
            #a이상 일때만 세주기
            if i**j>=a:
                cnt+=1
            j += 1
                                  
print(cnt)

 

거의 소수의 최대 값은 b의 제곱근임,

따라서 에라토스테네스의 체를 사용할 때도 b제곱근 만큼의 공간만 사용 가능

  1. 에라토스테네스의 체를 사용하여 소수를 찾음
  2. 소수인 경우 거듭 제곱이 a이상 이고 b이하인 경우 세주기

'알고리즘 공부 > 백준' 카테고리의 다른 글

백준 1038번  (1) 2022.10.29
백준 1016번  (0) 2022.10.29
백준 1189번  (0) 2022.10.29
백준 17086번  (0) 2022.10.29
백준 1062번  (0) 2022.10.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함