링크
백준 2960 에라토스테네스의 체
원래는 해당 문제를 풀생각이 아니었다.
17103 골드바흐파티션 문제를 풀려 했으나 도저히 소수를 효율적으로 구하는 방법을 모르겠어서 검색을 했다.
'에라토스테네스의 체'를 이용하면 소수를 쉽게 구할 수 있다는 것을 알았고 코드를 직접 짜봤다.
(이 코드와 에라토스테네스의 체의 설명은 글 하단에 작성하겠다.)
나아가 좀더 체득하기 위해 관련문제인 해당문제를 풀었다.
소수를 구하는게 아니므로 소수를 따로 저장해 줄 필요는 없다.
또한, 문제에선 소수마저 카운트로 치기 때문에 해당 부분만 주의해서 구현해주면 된다.
N, K = map(int, input().split())
tmp = 0
sieve = [True] * (N + 1)
for i in range(2, N + 1):
for j in range(i, N + 1, i):
if sieve[j] != False:
sieve[j] = False
tmp += 1
if tmp == K:
print(j)
n = 1000
sieve = [False, False] + ([True] * (n - 1))
primes = []
for i in range(2, n + 1):
if sieve[i]:
primes.append(i)
for j in range(i * 2, n + 1, i):
sieve[j] = False
print(primes)