Nombre de Lychrel

Nombre de Lychrel

Contexte

Un nombre de Lychrel est un entier naturel qui ne peut pas former de nombre palindrome lorsqu’il est soumis au processus itératif qui consiste à l’additionner au nombre formé de l’inversion de ses chiffres en base 10.

Un exemple de ce processus itératif:

  1. Prenez un nombre: 251 ;
  2. Ajoutez-le à son nombre palindrome : 251 + 152 = 403 ;
  3. Si la somme n’est pas un nombre palindrome, recommencez l’étape 2. : 403 + 304 = 707.

Si, quel que soit le nombre d’itérations, vous n’arrivez jamais à obtenir un nombre palindrome, le nombre de départ s’appelle un nombre de Lychrel.

On ne connaît avec certitude aucun nombre de Lychrel, bien que de nombreux nombres soient suspectés. Le plus petit d’entre eux est 196. Parmi les nombres inférieur à 1000, les autres nombres suspectés sont 295, 394, 493, 592, 689, 691, 788, 790, 879, 887, 978, et 986.

Le plus grand nombre non Lychrel connu est 1186060307891929990. Il nécessite 261 itérations. Source : Reversal-addition palindrome records.

Environnement de travail

Pour cet exercice, vous devez utiliser en priorité le fichier squelette ex05-lychrel.py. IMPORTANT : Enregistrez le avec Right Click + Save Link As... pour conserver l’encodage.

Selon la convention de structuration des modules, ce fichier sera structuré en quatre parties :

  1. Imports et définition des variables globales est vide car on ne fait pas appel à des packages externes, ni à des variables globales ;
  2. Définition des fonctions secondaires contient les différentes fonctions à écrire ;
  3. Définition de la fonction principale contient l’appel aux fonctions secondaires;
  4. Appel protégé de la fonction principale.

Objectif

Ecrire la fonction lychrel() :

Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main() et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).

Doctests

Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal:

$ python -m doctest ex05_lychrel.py -v

La totalité des doctests doivent réussir.

Application

Utiliser cette fonction pour rechercher le nombre d’itérations nécessaires pour les entiers de 1 à 100. N’essayez surtout pas avec les nombres suspects précisés ci dessus ! Quel est le nombre d’itérations maximal ? Pour quel nombre entier ?