Au début de cette aventure, il y a évidemment l’enseignement des mathématiques ou plus exactement des mathématiques pour l’informatique, puisque c’est la dénomination officielle du cours que j’assure en BTS SIO (Services Informatiques aux Organisations). Un des modules à y enseigner est l’algorithmique et celui-ci est évalué par un contrôle en cours de formation (CCF) qui traditionnellement a lieu en fin de première année. C’est à cette occasion que j’ai commencé à chercher des sujets « originaux » pour faire passer l’examen. L’épreuve se passe sur plusieurs demi-journées puisque le temps de préparation d’une heure par candidat est suivi de vingt minutes d’interrogation orale et suivant le nombre d’étudiants, il faut pouvoir disposer de plusieurs sujets car il y a très souvent plus de 24 heures entre le premier candidat et le dernier. J’ai donc commencé à chercher des sujets de niveau plus ou moins comparables, en rapport avec l’enseignement suivi et qui assurent une bonne certification du programme de BTS SIO. La tâche était assez délicate a priori puisque c’était la première fois que j’étais responsable de cet enseignement.
Heureusement, dans mon académie, celle de Nice, il existe un parcours M@gistère dédié au CCF de Mathématiques en BTS. La formatrice, Isabelle Pazé, notamment directrice de la collection de manuels de BTS Nathan technique, avait ainsi initié une centralisation des sujets de CCF, à l’échelle académique, entre 2017 et 2022.
J’étais déjà inscrit à ce parcours, en qualité d’enseignant en Comptabilité-Gestion (CG). C’est ainsi que j’ai pu voir ce que les collègues de mon académie proposaient à leurs étudiants pour cet examen. Parmi les sujets qui m’ont attiré, je note la présence d’un sujet sur les « mots parfaits », un concept que je ne connaissais pas. Il établit un parallèle entre nombres et mots et cherche à « généraliser » la notion de nombre parfait aux mots. Le sujet est proposé par mon collègue de Toulon, Luc Ponsonnet. C’est en très grande partie à lui que je dois les recherches que je m’apprête à raconter.
Les nombres parfaits
Un diviseur propre d’un nombre entier quelconque (non nul) est un diviseur autre que le nombre lui-même. Jean-Paul Delahaye, dans son article du numéro 496 (nombre parfait) de Pour la science, utilise plutôt le terme de « parties aliquotes » pour désigner les diviseurs propres d’un entier. En effet, étymologiquement parlant, le mot « aliquote » signifie « qui est contenu un nombre entier de fois dans un tout ». Ainsi, par exemple, 13 est une partie aliquote de 39.
Par définition, un nombre égal à la somme de ses diviseurs propres est dit « parfait ». Un nombre parfait est donc défini comme étant égal à la somme de ses parties aliquotes.
Le premier nombre parfait est 6. En effet 1, 2 et 3 sont les diviseurs propres de 6 et 1+2+3=6.
28 est également un nombre parfait : 1+2+4+7+14=28.
Notons tout de suite que les nombres parfaits sont rares, il n’en existe que trois inférieurs à 1 000 qui sont 6, 28 et 496. C’est certainement à cette rareté que l’on doit la référence à une forme de perfection. Perfection « formelle » s’il en est puisque la définition pose ainsi qu’un nombre parfait se décompose additivement avec tous ses diviseurs propres.
Cette fréquence de 3 pour 1 000 dans l’ensemble des 1 000 premiers entiers chute ensuite drastiquement puisque les nombres parfaits suivants sont 8 128, puis 33 550 336, puis 8 589 869 056...Cela fait donc 6 nombres parfaits pour les 10 milliards d’entiers les plus petits. Aussi rare que la perfection dans la vraie vie en somme !
Notons qu’actuellement (novembre 2025), seuls 52 nombres parfaits sont connus. Et seulement 12 l’étaient en 1952 avant l’arrivée des « ordinateurs ». Le plus grand d’entre eux est lié au plus grand nombre premier connu, qui est $2^{136 279 841}-1$, confirmé le 12 octobre 2024. Ce dernier porte désormais officiellement le nom de M136279841. Il s’agit d’un nombre comportant 41 024 320 chiffres lorsqu’il est écrit en base dix. Il a été découvert le 11 octobre 2024 par Luke Durant dans le cadre du projet Great Internet Mersenne Prime Search (GIMPS), qui engage des bénévoles à rechercher collectivement des nombres premiers. Ce dernier est également un nombre de Mersenne. Or, connaître un nombre de Mersenne premier permet d’obtenir un nombre parfait grâce à une propriété bien connue des spécialistes de théorie des nombres, des étudiants de classes préparatoires et des agrégatifs :
Si $2^p - 1$ est un nombre premier alors $n = 2^{p-1}(2^p - 1)$ est un nombre parfait.
Cette propriété fut démontrée par Euclide lui-même et Euler apporta au XVIIIème siècle la preuve que tous les nombres parfaits pairs sont de cette forme.
L’étude des nombres parfaits a débuté il y a plus de 25 siècles et pourtant plusieurs questions restent non résolues :
– Existe-t-il des nombres parfaits impairs ?
– Y a-t-il une infinité de nombres parfaits ?
A l’inverse, certaines affirmations, parfois fort étonnantes, sont le témoin d’une recherche active dans ce domaine. On sait par exemple que si un nombre parfait impair existe, celui-ci aurait au moins 101 facteurs premiers dont au moins 10 distincts et qu’il serait supérieur à $10^{1500}$ et serait d’une des trois formes suivantes : $12m + 1$ ou $324m + 81$ ou $468m + 117$. On sait aussi que les nombres parfaits pairs se terminent par 6 ou 28 et qu’ils sont des nombres de Kaprekar en base 2.
Pour conclure ce rapide panorama, on rappellera que jadis les nombres parfaits étaient considérés comme supérieurs à tous les autres. On voyait en eux un rôle mystique. Ainsi, Philon d’Alexandrie (20 avant J.C. ; 45 après J.C.), dans son ouvrage sur la Création, mentionne que si le monde a été créé en 6 jours et que la Lune tourne autour de la Terre en 28 jours, c’est parce que 6 et 28 sont des nombres parfaits. On lui attribue cette pensée « De tous les Nombres, 6 est celui qui régit la formation. C’est le premier nombre parfait en partant de l’unité, puisque égal à la fois à la somme et au produit de ses parties. Sa moitié est 3, son tiers est 2. L’impair est mâle, le pair, femelle. On obtient le 6 en les faisant se reproduire. Puisque le Monde est parfait dans son harmonie universelle sa formation fut gouvernée par un nombre parfait, c’est à dire 6...(1 + 2 + 3 = 6 et 1 x 2 x 3 = 6) ».
Observation reprise plus tard par Saint Augustin dans « La cité de Dieu » (420 après J.C.) : « (...) Dieu a créé toutes choses en six jours parce que ce nombre est parfait. »
Ces considérations mystiques peuvent faire sourire à notre époque, mais elles expliquent pourquoi la notion de nombre parfait a prospéré de par les siècles alors qu’au final il s’agit d’une famille de nombres a priori fort restreinte (débat en cours). Philon d’Alexandrie et Saint Augustin n’ont en fait que prolonger l’état d’esprit Pythagoricien qui voyait dans les nombres l’harmonie de l’univers. De plus, le caractère exceptionnel de cette curiosité arithmétique (en apparence) et les énigmes irrésolues qui s’y rattachent ont également œuvré dans ce sens et renforcé le bien-fondé de la terminologie employée. La quête de la perfection mathématique était en quelque sorte la quête de la Création puis la quête de la vérité scientifique. D’ailleurs, la recherche sur les nombres parfaits, qui peut apparaître aux novices comme quelque peu futile, a indirectement permis de gros progrès en théorie des nombres puis plus récemment en cryptographie et en théorie des graphes.
Étendre la perfection mathématique aux mots
Si les nombres sont composés de chiffres, les mots sont composés de lettres. Justement, dans le domaine des lettres, l’harmonie est souvent le but des écrivains, vient alors peut-être assez facilement l’idée de rechercher un mot parfait ou un mot « égal à la somme de ses parties aliquotes ». Il reste à définir ce qu’on entend par cette « définition » plaquée d’un concept mathématique.
Par somme, on comprend forcément concaténation. C’est-à-dire coller bout à bout des morceaux du mot, lesquelles parties devront avoir un sens et permettre donc de reconstituer le « tout » du mot. Mais alors, plusieurs mots viennent assez vite à l’esprit : surnager (sur-nager), départ (dé-part), soustraire (sous-traire), extraterrestre (extra-terrestre), déprime (dé-prime) ... Autrement dit, cela ressemble un peu à la démarche de Kaprekar qui sépare la partie « gauche » et la partie « droite » du carré de ses nombres fétiches afin de les reconstituer par addition et ce n’est pas très passionnant car notre langue est ainsi construite avec le principe des préfixes notamment et un nombre limité de syllabes.
Une autre idée qui vient assez naturellement est de transformer les lettres des mots en nombres afin de pouvoir étudier les propriétés arithmétiques des mots ainsi codés. On remplace alors les A par des 1, les B par des 2, etc. , les Z par des 26. On obtient un nombre entier par concaténation des nombres correspondants aux lettres constitutives, comme on réalise la concaténation de ces dernières pour écrire le mot. On parlera des identifiants numériques des lettres par la suite.
Ainsi BASE devient 21195 puisque B=2, A =1, S =19 et E =5. On peut alors songer à définir les « mots parfaits » comme étant ceux qui ainsi transformés sont liés à un nombre parfait. Malheureusement, on l’a vu les nombres parfaits connus sont peu nombreux et sont presque tous de très grands nombres, s’écrivant avec des dizaines ou des centaines de chiffres au minimum :
– 6 serait la transcription de F qui n’a pas de sens.
– 28 serait la transcription de BH qui n’a pas de sens.
– 496 serait la transcription de DIF qui n’a pas plus de sens à part l’acronyme de « droit individuel à la formation ».
– 8128 serait la transcription de HABH ou de HLH selon que l’on décompose en 8-1-2-8 ou 8-12-8. Nouvel échec.
– 33550336 commencerait par CCEE donc sans intérêt.
– 8589869056 commencerait par HEHIHF et contient un 0 non interprétable donc sans intérêt.
– 137438691328 commencerait par ACG ou MG...
Le nombre parfait suivant contient deux zéros non interprétables et le suivant a 33 chiffres, ce qui est rédhibitoire.
En conséquence, cette façon d’envisager les choses n’apporterait aucun mot parfait. Déception !
Pour explorer une autre piste, on convient de conserver la transcription des mots en nombres par la concaténation des identifiants numériques de chaque lettre. Et repartant à la définition du nombre parfait (égal à la somme de ses parties aliquotes), on peut envisager de comprendre la terminologie « parties aliquotes » non comme les diviseurs propres du nombre mais plutôt comme les « parties aliquotes du mot », soit tout simplement les lettres constitutives. Pour en faire la somme, il faut reprendre les identifiants numériques de chaque lettre et les additionner.
Pour le mot BASE, transcrit sous la forme 21195, il faut ainsi calculer : 2+1+19+5 = 27. En effet, les identifiants numériques des lettres B, A, S et E sont successivement 2, 1, 19 et 5.
Mais la définition du nombre parfait fait appel à la divisibilité que nous n’avons pas encore utilisé ici. Aussi, on peut convenir de voir si la transcription du mot en nombre est divisible par la « somme des parties aliquotes ». Autrement dit, pour le mot BASE, 21195 est-il divisible par 27 ?
La réponse est oui puisque 21195 = 27 $\times $ 785.
Cette procédure est exactement celle qui est donnée dans le sujet de CCF de Luc Ponsonnet sur les mots parfaits. Si on l’accepte comme définissant le concept de « mot parfait » alors BASE en est un.
Les mots parfaits
Voici la procédure de détermination des mots parfaits de ce sujet, légèrement retouchée par mes soins.
On affecte à chaque lettre d’un mot son identifiant numérique selon le tableau suivant :
On obtient alors la chaîne de caractères composée des indices concaténés dans le bon ordre des lettres qui composent le mot choisi, ainsi au mot « LYON » est associé la chaîne de caractères « 12251514 ».
Ce qui donne un entier a=12251514.
Puis on additionne les indices des lettres qui composent le mot : 12+25+15+14=66.
Ce qui donne un entier b=66.
Si le nombre b est un diviseur de l’entier a, on dira que le mot de départ est parfait.
Dans notre exemple, b est un diviseur de l’entier a donc le mot « LYON » est parfait. En effet, le reste de la division entière 12251514 par 66 est zéro.
A ce stade, nous connaissons deux mots parfaits : BASE et LYON. Un peu plus loin dans le sujet d’origine, on fait vérifier que le prénom ALAIN est parfait. Puis, on fait programmer la procédure de détermination en Python aux étudiants.
Le concept de mot parfait, ainsi défini, semble donc avoir des points communs avec celui de nombre parfait : on en trouve quelques spécimens, a priori plutôt rares. Cependant, on peut se demander pourquoi il serait intéressant de l’étudier. En effet, on ne voit aucune application, pas de lien avec d’autres branches des mathématiques dans lesquelles elle pourrait essaimer. De plus, à notre époque, les considérations mystiques ou cosmogoniques ne dépendent plus spécialement de la recherche d’une forme de perfection induite par les nombres. La seule vertu des mots parfaits sera donc éducative, tout comme les nombres parfaits, ils donnent naissance à de bons exercices pour apprendre la programmation notamment avec le langage Python.
On peut commencer par exemple par faire écrire une fonction Python qui permet de transcrire le mot en nombre par concaténation des identifiants numériques de chaque lettre.
En voici une version simple (mais pas la plus efficace) :
def transcription(mot:str):
mot = mot.upper()
alphabet ='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
sortie = '' # Initialise la chaîne de caractères à vide
for i in range(len(mot)):
for j in range(26):
if mot[i]==alphabet[j]:
sortie = sortie + str(j+1)
return sortieL’écriture de cette fonction est intéressante car elle nécessite une attention aux types des variables et une solution de transtypage str pour transformer un indice entier « j+1 » en chaîne de caractères. Au niveau des chaînes de caractères, la concaténation est réalisée par le signe « + » et on doit utiliser le i-ème élément de la chaîne de caractères mot grâce à mot[i]. Enfin, les structures de boucles for imbriquées et conditionnelles donnent une richesse suffisante pour évaluer les éléments du programme.
La fonction :
– met le mot en majuscules si besoin
– parcourt chaque lettre
– cherche sa position dans l’alphabet
– ajoute cette position+1 à la chaîne de caractères sortie.
Testée sur le mot BASE, elle renvoie bien 21195.
Voici une version plus optimisée, sans boucles imbriquées :
def convertir(mot: str):
mot = mot.upper()
sortie = ''
for lettre in mot:
valeur = ord(lettre) - ord('A') + 1
sortie += str(valeur)
return sortieLa fonction intégrée de Python ord() revoie le Unicode du caractère, mais comme ord(’A’) = 65 et non 1, il faut procéder à un décalage pour retrouver la bonne valeur soit A = 1, B = 2 etc.
Dans une deuxième étape, on fait écrire une fonction Python qui rajoute des lignes de code permettant de calculer « la somme des parties aliquotes » du mot autrement dit la somme des identifiants numériques de chaque lettre. Puis la fonction détermine, au final, si le mot est parfait en calculant le reste de la division euclidienne du mot transcrit en nombre par cette somme.
Voici une version simple de cette fonction Python :
def parfait(mot:str):
mot = mot.upper()
alphabet ='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
sortie = '' # Initialise la chaîne de caractères à vide
somme = 0
for i in range(len(mot)):
for j in range(26):
if mot[i]==alphabet[j]:
sortie = sortie + str(j+1)
somme = somme + j+1
if int(sortie) % somme == 0:
return ('le mot est parfait')
else:
return ('le mot est pas parfait')Là encore, il faut veiller aux types et appliquer le transtypage int pour transformer la chaîne de caractères sortie en nombre entier afin d’effectuer la division.
La fonction parfait appliquée à ’BASE’ renvoie ’le mot est parfait’. Le mot ’ELEGANT’ est lui rejeté.
Mais cette fonction se contente de tester les mots qu’on lui suggère. Elle n’est pas implémentée pour trouver des mots parfaits. Et à bien y réfléchir, cette question me pose problème ! En effet, j’ai beau chercher partout sur le web et dans des manuels de BTS SIO ou de NSI, je ne trouve aucun autre nombre parfait. Les seuls mots parfaits que j’ai pour construire mon sujet de CCF sont LYON et ALAIN. J’ai trouvé le mot BASE beaucoup plus tard. Quand je trouve une référence aux mots parfaits sur un site internet, les exemples sont encore et toujours LYON et ALAIN. Par exemple sur cet excellent site.
Se pourrait-il qu’il n’existe pas d’autres mots parfaits ?
C’est à ce moment-là que je me suis mis à en chercher d’autres !
La fièvre de la recherche
Et il faut bien le dire les premières heures de recherche à l’aveugle ne donne rien ! Aucun nouveau mot parfait ne vient allonger ma petite liste de noms propres. Il faut dire qu’il devrait y avoir assez peu de chances qu’un mot pris au hasard dans les 64 000 noms communs du Larousse soit parfait. CHAT, CHIEN, GRAND, PETIT, DOUDOU, ETOILE ne sont pas parfaits...
Le lendemain, un trait de lumière vient illuminer la matinée : SOLEIL est un mot parfait.
SOLEIL se transcrit en 1915125912 et 19+15+12+5+9+12 = 72. Et 1915125912 est bien divisible par 72.
J’ai enfin un nom commun parfait. Il est assez inattendu que ce premier mot parfait de ma liste ait un lien étroit avec l’harmonie de notre univers.
Mais la joie est de courte durée, les essais suivants sont des échecs jusqu’au moment où j’entreprends une recherche plus organisée. Je me souviens alors qu’il est facile de reconnaître les nombres divisibles par 25. Leurs deux derniers chiffres sont 00, 25, 50 ou 75. Je décide de mettre à profit cette constatation pour chercher des mots, s’ils existent, qui ont une somme des identifiants numériques égale à 25 et se terminant par les lettres BE qui se transcrivent en 25.
Les deux premiers mots qui me viennent sont CUBE et ASTROLABE.
Mais CUBE est transcrit par 32125 et 3+21+2+5 n’est pas égal à 25. Caramba ! Encore raté !!!
Clairement, ASTROLABE est un mot trop long pour avoir une somme des identifiants numériques égale à 25. Les lettres constitutives sont de plus souvent de la seconde moitié de l’alphabet.
S’ensuit une longue liste d’échecs avec les mots ABBE, BULBE, BOMBE, BRIBE, ACERBE, GERBE, GALBE, GLOBE, FOURBE, LOBE, GOBE, JAMBE, HERBE, PLEBE, LIMBE....
Je passe même à côté d’un mot parfait sans m’en apercevoir car la somme de ses identifiants numériques est 27 et non 25 : ARABE donne 118125 et 1+18+1+2+5 =27. Je ne teste même pas la division euclidienne de 118125 par 27, tellement je suis focalisé sur l’objectif de la table de 25.
Cette tentative fait chou blanc !
Malheureusement, il n’est pas possible de chercher des mots se transcrivant par un nombre finissant par 00, ni même par 50 car 0 n’identifie aucune lettre et 50 non plus. Il reste l’opportunité d’essayer avec 75 ce qui revient à chercher des mots se finissant par GE. De tels nombres sont aussi assez souvent multiples de 75 donc on peut chercher des mots ayant « une somme des parties aliquotes » égale à 25 ou 75, ce qui ouvre la porte à des mots longs cette fois-ci.
GARAGE, ASPERGE, ASSEMBLAGE, ARRIVAGE, ADJUGE, AGRAFAGE, BERGE, BEIGE, BELGE, BOULANGE, BRASSAGE, BRONZAGE, DECOURAGE...viennent vite rejoindre le cimetière des espoirs déçus ou du moins des mots imparfaits.
Et le temps passe, je viens encore de passer à côté de mots parfaits en me focalisant sur 25 et 75. Au final, cette tentative de recherche méthodique n’a apporté aucun mot parfait. C’est ainsi que je me mets à réfléchir à d’autres critères de divisibilité...sans grand succès !
La fièvre de la recherche devant ce problème résistant ne s’essouffle pas. Mais, le temps presse, je souhaite écrire une question dans mon sujet de CCF où les étudiants testent plusieurs mots avec leur programme Python et donnent la liste de ceux qui sont parfaits. Or pour l’instant, je n’ai que SOLEIL à proposer et je dois transmettre rapidement mon sujet à la reprographie du lycée.
Recours à l’intelligence artificielle
C’est alors que je décide de confier cette recherche à ChatGPT pour gagner du temps. Cet agent conversationnel a du mal à entrer dans ma définition, il me parle régulièrement de nombres Harshad (un autre sujet classique de CCF en BTS SIO). Un nombre Harshad est divisible par la somme de ses chiffres. Exemple de discussion pour le mot parfait « LYON » :
ChatGPT connaît d’autres procédures pour définir les mots parfaits.
ou :
Je parviens à lui expliquer la définition retenue pour les mots parfaits. Il me répond alors :
Je mets alors à vérifier ses affirmations.
AMI se transcrit par 1139 et 1+13+9 = 23 et 1139 n’est pas divisible par 23. ChatGPT se trompe.
BOIS se transcrit 215919 et 2+15+9+19 = 45 et évidemment 215919 n’est pas divisible par 45. ChatGPT se trompe.
MARE se transcrit par 131185 et 13+1+18+5 = 37 et 131185 n’est pas divisible par 37. Trois mots proposés, trois échecs ! Caramba ! Encore raté !!!
Si on analyse les erreurs commises par l’IA, on s’aperçoit que les mots sont bien transcrits, que la somme des identifiants numériques est réussie mais que ce sont les divisions qui sont fausses :
Je décide alors de me tourner vers Grok, qui me semble plus habile pour les problèmes mathématiques, notamment lorsqu’on lui demande de « réfléchir intensément ». Avec ce prompt, Grok entre immédiatement dans le vif du sujet :
Avec le prompt suivant, l’IA se met à réfléchir et m’annonce un peu plus de 4 minutes plus tard :
S’en suit la liste : BON, DE, JE, FACE, ENFANT, PROJET, MORT, complétée un peu plus tard par COUVRIR, ENSEMBLE, TROUVER. Grok reconnaît facilement que COUVRIR et TROUVER sont faux, mais tous les autres sont corrects.
J’actualise ma liste de mots parfaits. Elle contient désormais :
LYON, ALAIN, SOLEIL, DE, JE, BON, FACE, MORT, PROJET, ENFANT, ENSEMBLE.
De quoi finir et transmettre mon sujet de CCF à temps et avec la question souhaitée.
Réhabiliter ChatGPT
Cette échéance passée, à tête reposée, je parcours mes notes pour essayer de trouver une stratégie pour trouver un mot parfait sans IA quand je m’aperçois que la somme des identifiants numériques a souvent été 27 dans les mots que j’ai testés. Or, 27 est le cube de 3 et donc le critère de divisibilité par 3 peut me permettre d’affiner la liste des suspects. Finalement, je teste ARABE (qui est positif) et ANGE :
ANGE est transcrit par 11475, la somme des identifiants est bien 27 et 11475 est divisible par 27.
ANGE est un mot parfait. Cela ravirait Saint Augustin pour lequel « Dieu étant Créateur et Gouverneur de l’univers, toutes choses sont belles (...) » et « Dieu crée à la fois le mode spirituel, ses anges et le monde visible (...) ». Les anges parfaits, quoi de mieux !
Ce procédé me guide vers la recherche d’autres procédés similaires : par exemple, chercher des nombres dont la somme des identifiants est 49 (le carré de 7) et utiliser le critère de divisibilité par 7 dans le nombre pour dresser une liste de suspects potentiels. Ou alors combiner les critères de divisibilité par 3 et par 11 pour des nombres dont la somme des identifiants est 33. ou encore 77. Mais ces idées sont difficiles et longues à mettre en pratique car ces critères sont basés sur la somme des chiffres du nombre après transcription et pas sur les derniers chiffres comme pour 25. Avec 44, c’est donc plus pratique. Je cherche un mot pouvant se transcrire par un nombre divisible par 11 et par 4 donc se finissant par exemple par 12, 16, 20, 24, 28, 32, 36 .....
12 étant AB, je teste BAOBAB, transcris en 2115212 qui est divisible par 11 car les sommes des rangs pairs et des rangs impairs sont égales mais la somme des identifiants n’est pas 44 mais 23.
NABAB n’est pas plus parfait.
Pas mieux avec 16 qui signifie AF, qui a une très faible occurrence terminale dans les mots français. 20 correspondant à T, je ne trouve pas de mot finissant pat T et ayant 44 comme somme des identifiants. Caramba ! ....
C’est un flop total !
Alors, je finis par me dire que la puissance de Python peut m’aider à identifier des combinaisons de lettres suspectes. Il s’agirait d’écrire un programme qui trouve directement les combinaisons transcrites par un nombre divisible par la somme de ses identifiants numériques (ou parties aliquotes). Je n’aurais alors plus qu’à observer la liste obtenue et identifier les « mots » qui ont un sens.
Le programme étant un peu pénible à écrire, je mobilise à nouveau ChatGPT qui est habituellement très habile en programmation Python. Je parviens à lui faire comprendre qu’un même nombre peut être interprétée différemment en termes de lettres. Par exemple, la concaténation des identifiants « 123 » peut être compris comme la transcription de ABC (1-2-3) ou comme LC (12-3) ou encore comme AW (1-23). Ainsi, le programme doit envisager les diverses possibilités et calculer les sommes des identifiants correspondantes.
L’initiative proposée par ChatGPT me ravit :
Quelques minutes plus tard, je me retrouve avec un programme Python fonctionnel :
def parfaits_possibles(nombre: int):
mot = str(nombre)
resultats = []
def backtrack(prefixe, reste):
if not reste:
# ⚠ Reconstruction stricte pour éviter les faux positifs
reconstruction = ''.join(str(x) for x in prefixe)
if reconstruction != mot:
return
somme = sum(prefixe)
if somme != 0 and nombre % somme == 0:
mot_lettres = ''.join(chr(64 + n) for n in prefixe)
resultats.append((prefixe, somme, mot_lettres))
return
# ---------------------------
# Essayer un chiffre
# ---------------------------
# ⚠ interdiction des segments commençant par '0'
if reste[0] != '0':
val1 = int(reste[0])
if 1 <= val1 <= 26:
backtrack(prefixe + [val1], reste[1:])
# ---------------------------
# Essayer deux chiffres
# ---------------------------
if len(reste) >= 2 and reste[0] != '0':
val2 = int(reste[:2])
if 1 <= val2 <= 26:
backtrack(prefixe + [val2], reste[2:])
backtrack([], mot)
return [r for r in resultats if r]
# TEST
for i in range(1000, 2000):
if parfaits_possibles(i) != []:
print(parfaits_possibles(i))Python trie les nombres entre 1000 et 2000 qui ont la particularité de pouvoir être « découpés » en identifiants numériques entre 1 et 26 et qui sont divisibles par la somme de ces identifiants. Ne sont ainsi affichés que les mots suspectés d’avoir un sens et qui sont donc parfaits d’office. Chaque résultat sera un tuple :
(liste des identifiants numériques, somme des identifiants, « mot suspecté »).
Le programme utilise la fonction récursive : backtrack(prefixe, reste). Notons que la récursivité est hors programme BTS SIO. Elle explore toutes les façons possibles de découper la chaîne.
L’instruction de compréhension de listes return [r for r in resultats if r] évite de faire renvoyer des réponses vides.
L’utilisation du programme provoque un affichage de ce type :
Il reste à l’utilisateur à la parcourir en cherchant des mots qui ont un sens. Sur cette copie d’écran, le mot OIE apparaît. Il a un sens en français. Il s’agit donc d’un mot parfait. Il est bien transcrit par 1595, 15+9+5 =29 et 1595 = 29 X 55, ce qui confirme la justesse de l’affirmation précédente.
Cette nouvelle procédure de recherche s’annonce féconde.
Allonger la liste de mots parfaits
D’autant plus féconde que je remarque également le mot OFF sur cette copie d’écran. Je n’avais pas imaginé jusqu’à maintenant que j’allais pouvoir identifier également des mots parfaits en anglais voire en allemand.
Je mets donc à faire de multiples tests en changeant régulièrement la fenêtre de travail, en veillant à ne pas proposer une plage de nombres trop large pour ne pas surcharger Python.
On ne tient pas compte des accents et des trémas.
Notons que parfois des intervalles très larges ne renferment aucun suspect, comme par exemple [400000 ;410000]. En effet, après le 4 des centaines de mille que l’on interprète D, le 0 des dizaines de mille ne correspond à aucune lettre...et on ne peut pas non plus grouper 4 et 0 pour lire 40 qui ne correspond pas plus à l’identifiant numérique d’une lettre. Cela accélère un peu la recherche. D’autres intervalles, très nombreux, provoquent aussi des accumulations de consonnes consécutives et donc où les noms ayant du sens sont très rares. Même chose avec les accumulations de voyelles comme par exemple l’intervalle [990000 ; 1000000] où les mots commenceraient tous par II.
Le tableau suivant donne le résultat des recherches systématiques jusqu’à un million :
| Intervalle de nombres | Mot parfait en français | Mot parfait en anglais |
| [100 ;10000] | JE, ACE, LU, OIE, COI, CAFE, FACE, GEL | ACE, CAB, DAD, OFF, ACID, BEEF, DUB, DICE, FACE, HAT, HEAD |
| [10000 ;20000] | ANGE, JOB, KIT, LAID, NAGE, PRE, SUE, SEL | JOB, KIT, OIL, PIT, RICE, SIR, SIT |
| [20000 ;30000] | TAIE, BASE, USE, BON, BAIL | TEN |
| [30000 ;40000] | CLIC, CUL | CARE, CUT, CHEEF |
| [40000 ;50000] | DON, DIME | |
| [50000 ;100000] | EMO, FOL, FAIT, GALE, GENA | EARE, FEET, GUN |
| [100000 ;200000] | JOIE, KEPI, ARABE, KINE, KITE, AVAL, LUGE, AVEZ, MOT, MIRE, NUEE, NIEZ, OTEE, OGRE, PESE, RIME, SIEGE, RAFT | KITE, NAIL, NUT, SKY, RAFT |
| [200000 ;400000] | BOUE, BAGEL, VIDEE, CABRE, CADRE, CLUE, CIGUE | BEGAN, COAT, CHILD |
| [400000 ;600000] | DATEE, DUEL, DYKE, DEBIT, DEGEL, DIODE, EVIDE | DYKE, DILL, EAST, EUTH, EVIL |
| [600000 ;700000] | FUME, FUIR, FELEE | |
| [700000 ;800000] | GLUE, GORE | |
| [800000 ;900000] | HEARD |
Prénoms « parfaits » : UGO, GABY, ABDEL, CAÏN, LISA, LISE, NADIA, ADELE, PACO, PEIO, DALIA, ELSA, FIDEL, GINO, NELEA.
Personnages parfaits : BAMBI, ALFIE (de Emily in Paris).
Marques « parfaites » : FIAT, JEEP, AJAX, SEAT.
Mots parfaits en allemand : ALT, LIEBE, NEUE, TAUB, TOT, TIEFE, WEHR, ZEIT, ERBT.
Mot parfait en espagnol : PIEL.
Villes parfaites : LYON, FOIX.
Pays parfait : LIBAN.
Artistes « parfaits » : LAGAF, LAFEE, DEFOE.
Acronymes « parfaits » : PQ, FBI, CGT, PDG, HLM, CIO, NFP, MEVE, ADSL, SNCF, SQL, GIPN.
Acronymes « parfaits » dans le domaine de l’éducation : CIO, DAAC, BCID, MGEN (sic), PPS, CCF, MATH.
En observant ce tableau, on peut avoir l’impression que les mots parfaits sont de plus en plus rares puisque on n’en trouve pas entre 900000 et 1000000 et quasiment aucun jusqu’à 1200000, mais cette remarque est à nuancer par la réalité alphabétique. Il y a moins de chances de trouver des mots parfaits commençant par I que par A dans une fenêtre entre [1200000 ;1300000]...
Autres mots parfaits au-delà du million : JUDEE, KILO, ALLAH, LAVEE, LABEL, LEGAL, PACTE, AGENCE, SOLEIL, PROJET, ENFANT, ENSEMBLE.
Si l’étude des résultats du programme Python a été faite minutieusement, il faut admettre que la liste obtenue n’est assurément pas exhaustive, par inadvertance ou par ignorance de certains mots.
J’ai retenu avant de jeter l’éponge environ 75 mots parfaits français, ce qui les rend à peine plus nombreux que les nombres parfaits. Donc rares par rapport aux 200 000 mots probables de notre langue.
Le premier mot parfait de 6 lettres trouvé grâce à cette procédure est AGENCE, codé par 1751435.
Assurément, la liste des mots parfaits français est finie. En effet, au delà d’un certain rang, correspondant probablement au mot intergouvernementalisations, nouveau mot officiellement le plus long, il n’y a plus aucune chance de trouver des mots qui ont un sens même s’ils ont la propriété arithmétique recherchée.
Ce mot codé par 9142051871522251814513514201129191209151419 a une somme de ses parties aliquotes égale à 334 et n’est donc pas parfait.
Qu’en est-il de mots techniques encore plus longs mais absents du dictionnaire : hexakosioihexekontahexaphobie (peur du nombre 666), cyclopentanoperhydrophénanthrène ou aminométhylpyrimidinylhydroxyéthylméthythiazolium ?
De cette étude non exhaustive de la situation, on pourra retenir quelques faits savoureux :
– mort qui est parfait en français et en allemand (tot) ;
– Caïn et Abdel (de justesse) qui sont des prénoms parfaits ;
– la MGEN, mutuelle parfaite ;
– et le CCF de MATH, instant parfait de validation des compétences.
Conclusion
« Il n’ y a pas de hasard ». Phrase que j’ai beaucoup entendue ces derniers mois. Et qui choque forcément mon instinct probabiliste qui s’attache justement à dominer le hasard. Mais, en effet, il n’y a pas vraiment de hasard au moment de conclure cet article. La trajectoire que j’ai empruntée était certainement toute tracée. Elle débuta par l’apprentissage solitaire de Python, ChatGPT aidant, puis par l’écriture de textes dans MathémaTICE avec des lignes de code. Mais grand lecteur, j’ai toujours été influencé par des envies d’entre-deux et de ponts entre les chiffres et les lettres. Ainsi, je me suis retrouvé de manière inconsciente sur une piste qui est au cœur de l’œuvre romanesque récente de Nathalie Azoulai. Dans Python, cette dernière peint le portrait d’une romancière fascinée par ceux qui codent et plus particulièrement en langage Python. Au point de vouloir en comprendre le pourquoi, les rudiments et les particularités syntaxiques, malgré ses 50 ans et une méconnaissance totale de cet univers opposé, principalement masculin. La romancière navigue alors entre les cours particuliers, les suites de 0 et de 1, l’usage de ChatGPT, en espérant trouver tour à tour un raffinement esthétique dans le code, une seconde jeunesse, un nouveau roman voire la clé de son passé. Et c’est ainsi que je me suis retrouvé en quête de son précédent roman, qui est intitulé La fille parfaite. Je l’ai même acheté deux fois par inadvertance. Mais heureusement en calcul booléen, 1 + 1 =1. La fille parfaite, c’est une entité qui n’existe pas, une créature chimérique, croisement de deux amies, l’une du milieu des lettres et l’autre du milieu des maths. Pendant une trentaine d’année, après avoir hésité à investir le domaine de l’autre, elles se suivent sur fond de rivalité et d’amitié réunis. L’une d’elle rate la médaille Fields, l’autre est romancière reconnue mais aucune ne parvient à devenir la fille parfaite, celle qui synthétiserait tous les dons. Ce roman se déroule sur fond de la recherche du pourquoi l’autre a-t-elle agi ainsi...laissant le lecteur en haleine, tout comme j’ai pu l’être au moment de chercher mes premiers mots parfaits. Ainsi, à défaut moi aussi d’avoir trouvé la fille parfaite, j’ai joint les chiffres et les lettres, les nombres et les mots pour trouver les mots les plus parfaits possibles et pour réconcilier les deux parties de moi que l’on veut toujours opposer.














