Подкину еще вариант:
import math
def npr(k):
x = 2*k*math.log(k)
xp = 1
while abs(x/xp-1) > 0.001:
xp = x
x = x - (x - k*math.log(x)) * math.log(x) / (math.log(x) - 1)
return x
def rwh_primes(n):
sieve = [True] * n
for i in range(3,int(n**0.5)+1,2):
if sieve[i]:
sieve[i*i::2*i]=[False]*((n-i*i-1)//(2*i)+1)
return [2] + [i for i in range(3,n,2) if sieve[i]]
k = int(input())
print( rwh_primes( int(npr(k)) + 1 )[k-1] )
Как работает:
rwh_primes - решето Эратосфена, не самая быстрая реализация, честно подсмотренная на
SO
npr - функция вычисления натурального n, количество простых меньше которого больше или равно k
(на основе
неравенства: k > n/ln(n) - функция реализует метод Ньютона для уравнения x/ln(x) = k)