У меня очень странная проблема, и я не могу найти способ ее исправить.
Следующий код находит простое разложение n
, помещает простые множители в список, затем находит все возможные вариации суммы простых множителей и распечатывает уникальные значения этого списка.
Пример: простые множители для 44 равны 2 * 2 * 11, поэтому для 44 будет распечатано
2,2+2,11,2+11,2+2+11 = 2,4,11,13,15:
Вот мой код:
import math
import sys
import itertools
from itertools import permutations
def primes(n):
primfac = []
d = 2
while d*d <= n:
while (n % d) == 0:
primfac.append(d)
n //= d
d += 1
if n > 1:
primfac.append(n)
return primfac
def primecombo(n):
b = []
for i in range(1, len(primes(n))+1):
for subset in permutations(primes(n), i):
b.append(sum((subset)))
a = list(set(b))
a.sort()
return a
сам код, кажется, работает нормально и эффективно по большей части, но по какой-то очень странной причине он становится до смешного медленным, когда вы имеете дело с любым числом, единственный простой фактор которого равен 2.
если вы попробуете напечатать primecombo (444444) или print primecombo (23452823), он напечатает результаты почти мгновенно, но если вы попробуете 2048 или 4096, он станет очень медленным.
Может ли кто-нибудь понять, почему это так, и что я могу сделать, чтобы это исправить?