Как разложить число на множители всеми возможными способами

def divide(n):
    d = 2
    while d*d <= n:
        if n%d == 0:
            print (n, '*')
            divide(n//d)
        d = d+1
    if n>1:
        print(n)
        print('____')
n = input(n)
n = int(n)
divide(n)

У меня получилось вот это, но оно не работает так, как надо


Ответы (2 шт):

Автор решения: Danis

попробуйте так:

def divide(n):
    d = 2
    flag = False
    while d*d <= n:
        if n%d == 0:
            print (d, '*', end=" ")
            divide(n//d)
            flag = True
        d += 1
    
    if not flag:
        print(n)

n = int(input())

divide(n)
→ Ссылка
Автор решения: Polina

Есть пара идей, в код пока не особо получается преобразовать:

Сначала разложим число на простые множители, а потом уже будем их друг на друга комбинациями умножать

Код для нахождения простых делителей:

n=0 #сброс (необязательно)
n =int(input(n))
s_divs=[] #массив простых делителей
def s_div(n): #функция нахождения всех простых делителей n
    a = [] #массив простых делителей
    d = [] #массив всех 'претендентов'
    #перебираем делители
    for i in range(n-2): #от 2 до n-1 включительно
        d.append(i+2)
    for i_2 in range(len(d)): #кол-во претендентов
        if n % d[i_2] == 0: #остаток от деления равен нулю
            a.append(d[i_2])
    print('Простые делители', n, ':', a)

s_divs=s_div(n)

Это плохая идея использовать саму процедуру внутри себя, работает некорректно

→ Ссылка