Я работаю над программой, которая найдет n
th. простое число. Например, перечисляя первые шесть простых чисел: 2, 3, 5, 7, 11
и 13
, мы можем видеть, что 6-е число - это 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
prime, мне нужны более быстрые коды.
Редактировать: Сначала я работал со списками, но я постоянно работал с MemoryError при работе с большими числами. Поэтому я передаю это и использую переменную, которая подсчитывает количество простых чисел cnt
.
С точки зрения лучшего алгоритма вы можете использовать [Sieve of Eratosthenes] (http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes) в диапазоне, указанном в [this math.SE answer] (http: // math.stackexchange.com/a/1259) – Sinkingpoint
@Quirliom Спасибо за ваш комментарий, _Создайте список последовательных целых чисел от 2 до n: (2, 3, 4, ..., n) ._, как вы видите по этому правилу , создайте список_, который будет бросать MemoryError при работе с большими числами, поэтому я перехожу со списками. – GLHF
Вы не должны ошибаться в ошибках памяти при <10 ** 8 - сколько у вас свободного бара? – user3467349