从Python中的素数因子列表中获取除数列表

2024-09-25 10:22:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个函数,它的输入是一个自然数n,输出是它的素因子的list。例如,对于输入100,它返回[2, 2, 5, 5]

我想创建一个函数

  1. 将我的输出的list转换为一个更整洁的输出,其中相同的素因子被组合(在我的列表中,素因子按非降序排列)为幂。在上面的示例中,[2^2, 5^2]
  2. 从这个新列表返回n的除数的list

特别是,一旦我拥有了list的权力, [p_1^{n_1},..., p^_k{n_k} ]

我想迭代以获得所有的倍数p_1^{a_1}* ... *p^_k{a_k}
,其中a_i不是负数,小于或等于n_i


Tags: 函数示例列表因子list权力倍数负数
2条回答

对于#1,如果您创建一个defaultdict,其中键是数字,值是它出现的次数,那么您应该能够实现您的目标

from collections import defaultdict

def concat_factors(factors):
    d = defaultdict(int)
    for factor in factors:
        d[factor] += 1
    return [k ** v for k, v in d.items()]

>>>prime_factors = [2, 2, 5, 5]
...concat_factors(prime_factors)
[4, 25]

对于#2来说,很难确定你想做什么。您可能需要提供一些额外的细节或澄清

我想您应该在这里使用Counter

from collections import Counter


def neatify(numbers):
    return [a ** b for a, b in Counter(numbers).items()]


def divisors(n, divisors):
    return [n // d for d in divisors]

divisors(60, neatify([60, 2, 2, 5]))一样使用它

相关问题 更多 >