ps:problems:boj:31216
슈퍼 소수
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 31216 |
문제명 | 슈퍼 소수 |
레벨 | 실버 5 |
분류 |
소수 목록 |
시간복잡도 | O(nlog^2(n) + q) |
인풋사이즈 | n<=3000, q<=1000 |
사용한 언어 | Python 3.11 |
제출기록 | 35096KB / 48ms |
최고기록 | 48ms |
해결날짜 | 2024/01/08 |
풀이
- k번째 소수를 p[k] 라고 쓸때, k가 소수이면 슈퍼소수가 된다. 즉, k번째 슈퍼소수는 p[p[k]] 이다.
- 예제에 친절하게 3000번째 슈퍼소수가 318137이라고 나와 있으므로, 처음에 318137까지의 소수 목록을 구해 놓으면, 각 쿼리를 O(1)에 처리할수 있다.
- 일반적인 n의 범위에 대해서 시간복잡도를 구한다면, 먼저 {{n번째 소수}번째 소수}까지의 범위에 대해서 소수 목록을 구해야 할텐데, 소수정리에 따라 n번째 소수를 nlogn이라고 생각하면한다면, 체를 돌려야하는 범위는 대략 nlog^2(n)이 될것이다.
코드
"""Solution code for "BOJ 31216. 슈퍼 소수".
- Problem link: https://www.acmicpc.net/problem/31216
- Solution link: http://www.teferi.net/ps/problems/boj/31216
Tags: [sieve]
"""
import sys
from teflib import numtheory
MAX = 318_137
def main():
T = int(sys.stdin.readline())
primes = numtheory.prime_list(MAX)
for _ in range(T):
n = int(sys.stdin.readline())
print(primes[primes[n - 1] - 1])
if __name__ == '__main__':
main()
- Dependency: teflib.numtheory.prime_list
ps/problems/boj/31216.txt · 마지막으로 수정됨: 2024/01/08 08:24 저자 teferi
토론