def calculate_syracuse(nbr:int):
    """
    Cette fonction prend calcule la suite de syracuse et 
    renvoie le nombre de terme de la suite et les termes de la suite

    calculate_syracuse(nbr:int) -> (longueure:int, suite:list)
    """
    suite = []
    longeur = 1
    suite.append(nbr)
    while(nbr != 1):
        if(nbr % 2 == 0):
            suite.append((nbr := nbr // 2))
        else:
            suite.append((nbr := nbr*3 + 1))
        longeur += 1
    return (longeur, suite)


def main():
    la_plus_longue_suite = (0, [])
    nbr = 1
    while(nbr <= 421337):
        nbr += 1
        if(nbr % 50000 == 0 or nbr < 10):
            print(f"Calcul du syracuse du nbr: {nbr}...")
        suite = calculate_syracuse(nbr)
        if(suite[0] > la_plus_longue_suite[0]):
            la_plus_longue_suite = suite
    print(f"Le nombre engendrant la plus longue suite de syracuse est le nombre: {la_plus_longue_suite[1][0]} avec la suite: {la_plus_longue_suite[1]} avec un nombre de terme de {la_plus_longue_suite[0]}")


main()