primes = primes + (i,)
очень дорого.Он копирует каждый элемент на каждом проходе цикла, превращая ваше элегантное решение для динамического программирования в алгоритм O (N 2 ).Вместо этого используйте списки:
primes = [2]
...
primes.append(i)
Кроме того, выйдите из цикла рано после прохождения sqrt (i).И, поскольку вы гарантированно передаете sqrt (i) перед запуском конца списка простых чисел, обновите список на месте, а не храните isprime
для последующего использования:
...
if j > math.sqrt(i):
primes.append(i)
break
if i%j == 0:
break
...
Наконец,хотя это не имеет ничего общего с производительностью, более Pythonic использует диапазон вместо while:
for i in range(3, 10000, 2):
...