Ваш код застревает, потому что ваша основная функция тестирования становится очень медленной!
Я выполнил ваш код с различными остановочными точками: 100, 1000, 2000 и 4000 простых чисел. Запуски заняли 0,01, 0,23, 0,98 и 4,31 секунды соответственно.
Вы можете видеть, что удвоение числа простых чисел, чтобы найти (примерно), в четыре раза больше времени. Это имеет смысл, учитывая, что для проверки, является ли n
простым, вы должны проверить его по n-2
другим числам (исключая 1
и n
). Итак, ваш алгоритм имеет сложность времени , по крайней мере, O(n^2)
, чтобы найти n
простых чисел.
(также я получил 104759
после того, как 10002 простых числа были найдены через 30 секунд. Сначала я случайно набрал «100002», что длилось довольно долгое время без каких-либо результатов ... )