以下代码可以找到
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)或primecombo(23452823),它会几乎瞬间打印出结果,但是如果你尝试2048或4096,它就会变得非常缓慢。
有人能看出这种情况的原因并且告诉我该如何修复吗?