Форум сайта python.su
def primitive2(th):
a = [2,3,5]
cur = 7
while len(a) < th:
prim = True
edge = int(sqrt(cur))
for i in a:
if i > edge: break
if not cur%i:
prim = False
break
if prim:
a.append(cur)
cur += 2
return a
Офлайн
EdСпасибо за наводку - интересный сайт чтобы потренироваться да еще и в разных языках. С удовольствием присоединюсь по мере возможности.
Кстати, если хотите поупражняться в производительности производства prime numbers(и не только), то вам сюда: http://www.spoj.pl/problems/PRIME1/
Можно совместно.
Офлайн
Если вернуться к счетчику вместо len(), то будет на несколько процентов быстрее.
Офлайн
Попробуйте это: http://code.activestate.com/recipes/576596-sieve-of-eratosthenes/
Вопрос производительности можно будет закрыть - это больше, чем в 15 раз быстрее, чем все, что есть в этом треде.
Отредактировано (Июль 11, 2010 18:39:36)
Офлайн
for i in xrange(1,th,2):
if i%10==5: continue
Офлайн
EdНет слов. Пока полноценно не тестировал - надо на работу, но разок прогнал - работает на порядок шустрей, хотя тут и срезы и filter, который добавлял мне еще секунды. А тут все пролетает. Думаю дело в том что все делается за одну проходку а не каждый раз заново, как все функции в этом треде. Тут реальное сито Эратосфена.
Попробуйте это: http://code.activestate.com/recipes/576596-sieve-of-eratosthenes/
Вопрос производительности можно будет закрыть - это больше, чем в 15 раз быстрее, чем все, что есть в этом треде.
Отредактировано (Июль 11, 2010 23:28:22)
Офлайн
странно, что вы не знали о таком распространенном алгоритме :) На русский, кстати, переводится как решето Эратосфена. http://ru.wikipedia.org/wiki/Решето_Эратосфена
Офлайн
ZubchickИзначально то интересовал, не лучший алгоритм, а почему медленее работает именно тот и сравнение производительности разных алгоритмов.
странно, что вы не знали о таком распространенном алгоритме :) На русский, кстати, переводится как решето Эратосфена. http://ru.wikipedia.org/wiki/Решето_Эратосфена
Офлайн