FeelingXD

[백준- 31216] 슈퍼소수 👀 본문

프로그래밍/문제풀이

[백준- 31216] 슈퍼소수 👀

FeelingXD 2024. 1. 14. 17:21

❓ Problem

🤔 How

슈퍼소수 는 소수로 이루어진 집합을 나열했을때 소수번째인 소수들을 '슈퍼 소수' 라고 표현한다 예를들어 소수가 f(n) = [2,3,5, .. .. ] 있을때 슈퍼소수는 f'(n)=[3,5 ...] 즉 슈퍼소수는 f(f(n)) 임을 알 수 있다.

  1. 소수집합을 아리스토 테네스체 알고리즘을 통해 얻고 그중 소수번째인 소수 친구들을 모아준다.
  2. 입력값에대한 소수를 반환한다.

❗ Solve

# 슈퍼 소수
import sys
input =sys.stdin.readline

def aristo_stick():
    global aristo
    aristo = [False,False] + [True]*(318137-1)
    for i in range(2,318137):
        if aristo[i]:
            for j in range(2*i,len(aristo),i):
                aristo[j]=False
    global primes,super_primes
    primes=[]
    super_primes=[]
    for i in range(len(aristo)):
        if aristo[i]:
            primes.append(i)

    for v in primes:
        if v-1<=len(primes):
            super_primes.append(primes[v-1])    

def solution():
    aristo_stick()
    for _ in range(int(input())):
        print(super_primes[int(input())-1])
if __name__=="__main__": # 실행되는 부분
    solution()
    pass

더 읽어볼 글