Прежде всего, из расплывчатого описания вашего алгоритма первичной проверки видно, что вы проверяете каждое число вплоть до числа, которое вы проверяете на простоту.Однако на самом деле вам нужно только проверить до квадратного корня из этого числа.Дальнейшая оптимизация будет состоять в том, чтобы убрать все четные числа, кроме двух (вы можете сделать это, увеличив на два по одному и протестировав 2 по отдельности), вы получите:перебирает числа от 2 и выше, проверяя, являются ли они простыми, и добавляет одно к вашему счетчику, если они есть.Когда вы достигаете 1000, останавливаетесь и выводите число, передаваемое функции isprime.
Конечно, есть и другие более эффективные методы, я лично предпочитаю Сито Аткина .Но это будет зависеть от вас, чтобы реализовать это, мой алгоритм будет служить вашим целям.
Редактировать: я заметил ваш комментарий, что «ничего не возвращается и не происходит», что будет связано с неэффективностью вашего алгоритма, еслиВы ждете достаточно долго, вы получите ответ.Тем не менее, я заметил, что у вас нет оператора печати в предоставленном вами коде, я надеюсь, что код, который вы используете, имеет его.
from math import sqrt
def isprime(test):
if test == 2: return True
if test < 2 or test % 2 == 0: return False
return not any(test % i == 0 for i in range(3, int(sqrt(test)) + 1, 2))
test_num = 2
prime_count = 1
while (prime_count< 1000):
test_num = test_num + 1
if (isprime(test_num)):
prime_count += 1
print test_num