我这样做的唯一问题是程序打印一个列表 这表明,比如n = 11,当我只是想要[11]时,最终结果会打印[2,2,3]。对于大多数测试来说,这也是如此,它将拥有我需要的数字,但也有额外的数字。
Base = 2
divisors = [ ]
while n > 1:
if n % Base == 0:
divisors.append(Base)
n = (n / Base)
else:
Base += 1 + Base % 2
return (divisors)
答案 0 :(得分:1)
您只需确保在if
声明之前未使用除数:
def prime_divisors(n):
ns = 2
divisors = [ ]
while n > 1:
if n % ns == 0 and n not in divisors:
divisors.append(ns)
n = (n / ns)
else:
ns += 1 + ns % 2 # 2 -> 3, odd -> odd + 2
return (divisors)
答案 1 :(得分:0)
如果您想从“除数”列表中删除重复元素, 你可以使用这样的功能。 这里list2是另一个最初为空的列表。
for i in divisors:
if i not in list2:
list2.append(x)
答案 2 :(得分:0)
我建议您更改n
除以ns
的逻辑,以消除 ns
的所有因子,而不是一次只删除一个。然后,由于您永远不需要在顶层重复ns
值,您可以使else
块无条件(这个额外的位不是必需的,只是很好):
def prime_divisors(n):
ns = 2
divisors = []
while n > 1:
if n % ns == 0:
divisors.append(ns)
while n % ns == 0: # add this loop, to avoid duplicated factors
n = (n / ns)
ns += 1 + ns % 2 # 2 -> 3, odd -> odd + 2 # this can be run unconditionally
return (divisors)