Mon classeur est composé des fonctions suivantes : - chnom() - isprimerm() - modpow() - nch() - nextpal() - nextprem() - palprem() nch(n) renvoie le nombre de chiffre de l'écriture décimale de n. chnom(n,p) renvoie le p-ième chiffre de l'écriture décimale du nombre n (en partant de la droite). Ces deux fonctions sont principalement utilisées par nextpal(). nextpal(n) renvoie le premier nombre palindrome respectant certaines conditions après n. Il fonctionne à partir de 101 (qui renvoie 111), et ne renvoie pas de nombre palindromes avec un nombre pair de chiffres (critère de divisibilité par 11), finissant par 0,2,4,5,6 ou 8 (divisibilité par 2 et 5). Pour les nombres premiers palindromes inférieurs à 101, j'utilise nextprem() qui renvoie directement la valeur. Cette fonction ralentit un peu (quelques dixièmes de seconde :p) le programme et n'est pas "belle", mais c'était la seule solution pour ne pas utiliser de liste pré-calculée (règlement du concours) et ne pas rallonger inutilement le programme nextpal() qui, lui, est exécuté beaucoup de fois. isprimerm(n) est un test de primarité de Rabin-Miller (d'ou le "rm" dans le nom) en base 2. Ce test ne fonctionne pas pour tous les entiers, à cause de nombres dits pseudo-premiers forts en base 2 qui donnent des faux positifs (ce test est plus fiable que le test de Fermat, ne fonctionnant pas pour les pseudo-premiers qui sont plus nombreux que les pseudo-premiers forts, et qui comportent 101101, un nombre de Carmichaël palindrome, c'est-à-dire pseudo-premier dans toutes les bases). J'ai vérifié qu'il fonctionnait pour tous les palindromes renvoyés par nextpal() jusqu'au 20 000 nombre premier palindrome. Ce test utilise le modulo de puissances de nombres pouvant être très grands, j'ai donc implémenté une fonction d'exponentiation modulaire, modpow(). J'ai ajouté, pour la rapidité du test (et pas pour le rendre fonctionnel) la division par les 10 premiers nombres premiers, qui m'a fait gagner (je ne sais plus pour quelle valeur) quelques secondes dans le programme complet. Le test de primalité était sûrement la partie qui ralentissait le plus le programme et je pense que celui-ci est vraiment très optimisé, puisqu'il prend une fraction de seconde, même pour des nombres très grands (plusieurs centaines de chiffres). Il n'est cependant pas aussi rapide que isPrime(), puisqu'il est quand même interprété. Enfin, palprem() est la fonction de l'énoncé. Son code de 13 lignes ne nécessite pas, je pense, d'explications =) Louis Abraham