Существует ряд проблем с вашим кодом:
Он генерирует простые числа, не простые , например 99973 = 257 * 389
Почти невозможно понять, как он решает, когда найдет достаточно простых чисел.
У него причудливые выражения, которые, кажется, не имеют смысла, например ::10000
for times in range (2):
primeList = []
Похоже, что код запускается дважды! Но это меняет результат!
Где код комментария!
И вот что:
while divisor < math.sqrt(len(primeList)):
Квадратный корень числа простых чисел, найденных вами до сих пор, является пределом при поиске вашего следующего простого числа?
Проблемные программы обычно перезаписываются или перезаписываются - это пример перезаписанной программы. Вы можете решить эту проблему с помощью дюжины строк Python длиной не более примерно 30 символов в доли секунды. Ваша программа требует вдвое больше строк, иногда вдвое длиннее, и занимает около минуты, чтобы получить короткий ответ.
Мой совет: начните все с простого:
Вам не нужно startingPrimes = [2,3, 5, 7, 11, 13, 17, 19]
. Достаточно просто инициализировать primeList = [2]
, чтобы избежать проверки четных чисел и сосредоточиться на нечетных делителях.
Вам не нужно math.sqrt()
, просто проверьте, если if divisor * divisor > number:
и все необходимые вам делители находятся в primeList
.
Единственная операция модификации, которую вам действительно нужно сделать на primeList
, это append()
.
Где-то должен быть явный тест на завершение, например ::
while len(primeList) < n: # where n = 10001