Получить список делителей из списка простых чисел в Python - PullRequest
0 голосов
/ 05 апреля 2020

Я создал функцию, чье входное значение является натуральным числом n, а ее выходным значением является list ее простых множителей. Например, для ввода 100 возвращается [2, 2, 5, 5].

Я хотел бы создать функцию, которая

  1. преобразует list моего результата в более чистый, где объединяются одни и те же простые факторы (в моем списке основные факторы упорядочены в порядке убывания) в степень. В приведенном выше примере [2^2, 5^2].
  2. возвращает list делителей n из этого нового списка.

В частности, когда у меня есть list с полномочиями, [p_1^{n_1},..., p^_k{n_k} ]

Я хотел бы повторить, чтобы получить все кратные как p_1^{a_1}* ... *p^_k{a_k}, где a_i не являются отрицательными и меньше или равны n_i.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Для # 1, если вы создаете defaultdict, где ключ - это число, а значение - это количество раз, которое он появляется, вы сможете достичь sh вашей цели.

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 очень трудно определить, что вы пытаетесь сделать. Вы можете предоставить некоторые дополнительные детали или разъяснения.

1 голос
/ 05 апреля 2020

Я думаю, вы хотите использовать Счетчик здесь:

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]))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...