Я работаю над программой, которая найдет n
-й. простое число. Например, перечисляя первые шесть простых чисел: 2, 3, 5, 7, 11
и 13
, мы видим, что шестое простое число равно 13
. Я пытаюсь создать алгоритм, например, если я хочу увидеть 50-е простое число, я добавлю 1
к концам функции range()
. В настоящий момент я использую этот алгоритм для поиска простых чисел;
cnt = 1
print (2)
for x in range(3,40,2):
div = False
for y in range(2,round(x**0.5)+1):
if x%y == 0:
div = True
if div == False:
print (x)
cnt += 1
print ("\nThere is {} prime numbers.".format(cnt))
Вы видите, я поставил 40
. Но я хочу поместить туда n
, поэтому, например, до 50-го простого числа добавьте +1 к n
. Но это не понравится, если я попробую что-то вроде;
cnt = 1
n = 40 #example
while cnt<50:
for x in range(3,n,2):
#codes
if div == False:
n += 1
Я думал, что когда программа найдет простое число, она добавит +1 к n
, и цикл while
будет обрабатывать, пока не найдет 50-е простое число. Но это не так, простые числа ошибочны, если я тоже использую это, ничего не имеет отношения к тому, что я хочу сделать.
Как сделать этот алгоритм, явно меняя последний элемент
range()
, функция не работает.Есть ли лучший / элегантный алгоритм / способ? Если я хочу найти
200.000th
простое число, мне нужны более быстрые коды.
Изменить: сначала я работал со списками, но у меня постоянно возникала ошибка MemoryError при работе с большими числами. Я передаю это и использую переменную, которая подсчитывает количество простых чисел cnt
.
cnt += 1
, который был пропущен? - person Joel   schedule 04.02.2015cnt
подсчет количества простых чисел - person GLHF   schedule 04.02.2015