версия списка делает намного больше проверок, чем та, которая идет только к квадратному корню из числа
для предела 200000, квадратный корень равен ~ 447, есть 17983 простых числа меньше, чем 200000
просто добавьте счетчик того, сколько раз вы выполняете проверку x% y, например
def prime_gen1(Limit = 10000):
List = [2,]
modulo_checks = 0
for x in range(3,Limit):
for y in List:
modulo_checks += 1
if not x%y:
break
if not x%y:
continue
else:
List.append(x)
yield x
print(modulo_checks)
def prime_gen2(Limit = 10000):
from math import floor
modulo_checks = 0
for x in range(3,Limit):
for y in range(2, floor(x**0.5)+2):
modulo_checks += 1
if not x%y:
break
if not x%y:
continue
else:
yield x
print(modulo_checks)
, теперь для предела 200000 версия 1 выполняет 162416226 проверок, а вторая 7185445
, если выдобавьте ранний разрыв для зацикливания списка, версия списка значительно быстрее (в 2 раза быстрее, 1799767 проверяет 0,24 с против 7185445 проверяет 0,64 с)
...
sq_root = floor(x ** 0.5) + 2
for y in List:
modulo_checks += 1
if not x % y or y > sq_root:
break
...
и удаляет математический импорт, если вы хотите сравнить скорости алгоритма