# Saisie par l'utilisateur(trice) de l'entier à décomposer
N = 1
while N < 2:
    N = int(input("Veuillez saisir l'entier à décomposer (N >= 2) : "))
Ninit = N

# Initialisation des listes DP (diviseurs premiers) et EDP (exposants de ces
# diviseurs
DP, EDP = [], []

# Cas particulier du facteur 2
E = 0
while N % 2 == 0:
    N //= 2
    E += 1
if E != 0:
    DP.append(2)
    EDP.append(E)

# Autres diviseurs premiers
D = 1
while D <= N:
    D += 2
    E = 0
    # D divise N
    while N % D == 0:
        N //= D
        E += 1
    if E != 0:
        DP.append(D)
        EDP.append(E)

# Affichage du résultat
DP.reverse()
EDP.reverse()
s = ""
for i in range(len(DP)):
    if EDP[i] == 1:
        s += str(DP[i]) + " * "
    else:
        s += str(DP[i]) + "^" + str(EDP[i]) + " * "
print("L'entier",Ninit,"se décompose comme suit :",s[:-3])