#!/usr/bin/python3

def est_un_diviseur_de (petit_nombre, nombre_plus_grand):
    return nombre_plus_grand % petit_nombre == 0
def est_premier (nombre):
    if nombre < 2:
        return False # Par définition
    else:
        for candidat_diviseur in range (2, nombre):
            if est_un_diviseur_de (candidat_diviseur, nombre):
                return False
        # Si je suis arrivé ici sans trouver un diviseur le nombre est premier.
        return True
def liste_de_premiers (limite_non_comprise):
    res = []
    for candidat_premier in range (2, limite_non_comprise):
        if est_premier (candidat_premier):
            res = res + [candidat_premier]
    return res
def affiche_tout_premier ():
    candidat_premier = 0
    while True:
        if est_premier (candidat_premier):
            print (candidat_premier)
        candidat_premier = candidat_premier + 1

def le_facteur_plus_petit_de (nombre):
    if est_premier (nombre):
        return nombre
    else:
        for candidat_facteur in range (2, nombre):
            if est_un_diviseur_de (candidat_facteur, nombre):
                return candidat_facteur
        assert False # C'est impossible d'arriver ici!
def factorise (nombre):
    facteurs = []
    while nombre > 2:
        son_facteur_le_plus_petit = le_facteur_plus_petit_de (nombre)
        nombre = nombre // son_facteur_le_plus_petit
        facteurs = facteurs + [son_facteur_le_plus_petit]
    return facteurs
