CodingTest/프로젝트 오일러

[파이썬]프로젝트 오일러 #7

Daybreak21 2022. 9. 27. 00:13
소수를 크기 순으로 나열하면 2, 3, 5, 7, 11, 13, ... 과 같이 됩니다.

이 때 10,001번째의 소수를 구하세요.
n = 2**20
primes = [] #소수를 담을 list
table = [False, False] + [True]*(n-1)

for i in range(2, n+1):
    if table[i]:
        primes.append(i)
        for j in range(2*i, n+1, i):
            table[j] = False

print(primes[10000]) #10001번째 값을 꺼낸다.

소수를 구하는 방법은 프로젝트 오일러 5번 문제에 사용했던 table을 만들고 소수의 배수를 하나씩 False로 지워나가는 방식을 사용하였다. 

 

문제점이 있다면 에라토스테네스의 체를 사용하기 위해 맨처음 n을 충분히 큰 수로 먼저 지정해주었는데, 그 만큼 메모리가 비효율적으로 쓰인다.

 

답: 104743