在Python中分解数字
问题内容:
这是我的代码:
def factorize(n):
sieve = [True] * (n + 1)
for x in range(2, int(len(sieve) ** 0.5) + 1):
if sieve[x]:
for i in range(x + x, len(sieve), x):
sieve[i] = False
lowerPrimes = i for i in range(2, len(sieve)) if sieve[i]] and (n % i == 0)]
return lowerPrimes
factorize(n)
返回给定值的所有素数n
。如您所见,它首先使Eratosthenes成为筛子n
,然后使用列表推导来返回筛子中作为的因子的所有值n
。为此,它工作得相对较好,但是,我希望它返回一个列表,以便如果将其中的每个项目相乘,结果为n
。你明白我的意思吗?
例如,factorize(99020)
回报[2, 5, 4951]
,但我想它返回[2, 2, 5, 4951]
,如2*2*5*4951 = 99020
。
我知道我的方法还差得远,但是您能帮助我做到吗?
问题答案:
Eratosthenes筛网可帮助您找到低于特定极限的质数。并不能真正帮助您找到特定数字的因数。
如果您想这样做,我可以看到的最简单的方法是这样的:
def factors(n):
while n > 1:
for i in range(2, n + 1):
if n % i == 0:
n /= i
yield i
break
for factor in factors(360):
print factor
这基本上找到的最小因子n
(保证为质数),除以n
该数字,然后重复该过程直到n
等于1
。
输出为:
2
2
2
3
3
5
它们乘以原始数:
>>> from operator import mul
>>> reduce(mul, factors(360))
360