Как написать функцию, которая возвращает список кортежей типа (c_i, k_i) для n таких, что n = c1^k1 * c2^k2 * ... , ci — простое число.
Например: 12600 = 2^3 * 3^2 * 5^2 * 7^1
Желаемый результат: [(2, 3), (3, 2), (5, 2), (7, 1)]
Я знаю, как это сделать с помощью while, но можно ли это сделать с помощью понимание списка? В этой задаче эффективность не требуется.
# naive function
def is_prime(n):
return n > 1 and all(n % i != 0 for i in range(2, n))
# while version
def factorization_while(n):
res = []
for i in range(1, n + 1):
if is_prime(i):
j = 0
while n % i == 0:
n = n // i
j += 1
if j != 0:
res.append((i, j))
return res
# list comprehension version
def factorization(n):
return [
(i, j) for i in range(1, n + 1) if is_prime(i) \
and n % i == 0 ... # add smth
]
Подробнее здесь: https://stackoverflow.com/questions/530 ... -in-python
Простая факторизация с использованием понимания списка в Python ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение