关于从一个数字中获得主要除数的最终列表的问题

时间:2016-03-07 00:34:01

标签: python

我这样做的唯一问题是程序打印一个列表 这表明,比如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)

3 个答案:

答案 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)