Я пытаюсь найти n-е число с использованием сита erathostenes. Да, я видел похожие сообщения, но у меня есть проблема с этой фрагментом кода. Я хочу остановить алгоритм, как только он найдет nth prime. Это то, что я написал:Python: найти n-е простое число
def nth_prime(n):
limit = 10**2
pn = 1 #keeps track of how many prime numbers we have found
sieve = range(3, limit, 2)
top = len(sieve)
for si in sieve:
if si:
pn += 1
print pn, si #used to check while coding
if pn == n:
return si #loop breaks when the nth prime is found
else:
bottom = (si*si - 3)/2
if bottom >= top:
break
sieve[bottom::si] = [0] * -((bottom-top)//si)
print nth_prime(11)
Это не работает. По крайней мере, не так, как я хочу. Если я добавлю обратный фильтр (нет, сито) [n-2] он отлично работает. Но я хочу, чтобы он прекратил вычислять на n-м премьер. Это выход вместо:
2 3
3 5
4 7
5 11
None
В то время как я бы ожидать, что она будет продолжаться до:
...
11 31
Если функция может вычислить все решето до предела правильно, почему не делает выход ведет себя так?