from tabelas import *

def fatores_primos(n, printa=False, passo=False, debug=False):
    assert n>1, f"A entrada deve ser maior do que 1"

    Encontrados = []
    Fatorar = n
    Candidato = 2
    if printa:
        L_encontrados = [""]
        L_fatorar = [n]
        L_i = [2]
    while Fatorar > 1:
        if Candidato ** 2 > Fatorar:
            Encontrados.append(Fatorar)
            if printa:
                if L_encontrados[-1] != "":
                    virg = ", "
                else:
                    virg = ""
                L_encontrados.append(L_encontrados[-1] + f"{virg}{Fatorar}")
                L_fatorar.append(Fatorar)
                L_i.append(Candidato)
            break
        while Fatorar % Candidato == 0:
            Encontrados.append(Candidato)
            if debug:
                print(f"{Fatorar=}, {Candidato=}, {Fatorar%Candidato==0}, {Encontrados=}")
            Fatorar //= Candidato
            if printa:
                if L_encontrados[-1] != "":
                    virg = ", "
                else:
                    virg = ""
                L_encontrados.append(L_encontrados[-1] + f"{virg}{Candidato}")
                L_fatorar.append(Fatorar)
                L_i.append(Candidato)
        if Fatorar == 1:
            break
        if debug:
            print(f"{Fatorar=}, {Candidato=}, {Fatorar%Candidato==0}")
        Candidato += 1
        if printa:
            L_encontrados.append(L_encontrados[-1])
            L_fatorar.append(L_fatorar[-1])
            L_i.append(Candidato)
    if printa:
        printa_tabela(["Fatorar", "Candidato", "Encontrados"],[L_fatorar, L_i,L_encontrados], passo=passo)
    else:
        return Encontrados
        
