【发布时间】:2013-04-07 02:19:08
【问题描述】:
这是我的代码:
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 的所有质因数。如您所见,它首先为n 创建一个Eratosthenes 筛子,然后使用列表推导返回筛子中所有与n 相关的值。它为此目的工作相对较好,但是,我希望它返回一个列表,这样如果您将其中的每个项目相乘,结果就是n。你明白我的意思吗?
例如,factorize(99020) 返回 [2, 5, 4951],但我希望它返回 [2, 2, 5, 4951],如 2*2*5*4951 = 99020。
我知道我的方法还不够接近,但你能帮我做到吗?
【问题讨论】:
-
由于多个问题,此代码无法运行 - 缩进一个,但更重要的是,您在返回前的最后一行有语法错误。
标签: python loops primes prime-factoring sieve-of-eratosthenes