Message
par C.Ret » 31 août 2014 11:05
Chouette un MPO, cela faisait trop longtemps.
Comme je travaillais hier, j'ai pris un peu de retard. L'avantage est que je vais pouvoir m'inspirer de vos productions. Et comme il faut que quelques secondes à certaines machines pour afficher les résultats, je vais tenter de le faire en moins de 13 min sur mon pauvre et vieux matériel !
L'idée d'imbriquer trois ou quatre boucles me plait bien.
Mais par contre, il faut alors faire attention à ne pas refaire sans cesse les mêmes calculs, surtout dans la boucle principale.
Outre le fait que les valeurs p=i^3 peuvent être pré-calculées pour les nombre de 0 à 9 (surtout sur certaines machines lentes qui estime les puissances entière avec une expression du type p=exp(3.ln(i)) ou je ne sais quoi de transcendant.
Il y a aussi à tenir compte que pour un nombre N à, 4 chiffres a b c et d, calculer N=1000*a+100*b+10*c+d et S=a^3+b^3+c^3+d^3 revient à faire bien trop de calculs inutiles.
En effet, dans la boucle la plus interne parcourant par exemple d, les expressions 1000*a+100*b+10*c et a^3+b^3+c^3 sont en réalité des constantes.
Ensuite le test d'affichage d'un résultat valable revient à comparer deux sommes dont les termes sont positifs et parcourus de façon croissante. Il s'agit donc de comparer deux fonctions croissantes.
Il doit donc y avoir le moyen de simplifier le test (tout au moins de faire en sorte qu'il nécessite moins de calculs)
Utiliser les taux d'accroissement plutôt que les valeurs absolues.
Et surtout de ne pas parcourir toutes les quatre boucles imbriquées quand les taux d'accroissement (l'un est linéaire et l'autre cubique) vont rendre vaine toutes chances d'aboutir ;
Par exemple rien ne sert de tenter de trouver une solution pour a=4. En effet avec a=4, les entiers N sont dans l'intervalle [ 4000 5000 [ et les cubes des trois autres chiffres ne pourront totaliser plus de 3*9^3 = 729 c'est à dire que les valeurs S seront comprises dans l'intervalle [ 64 793 ].
Donc rien ne sert d'aller au-delà de a=3
Afin la boucle parcourant le dernier chiffre, est-elle bien nécessaire ?
Ne peut-on pas trouver la ou les valeurs de d qui conviennent à partir des valeurs N et S déduite du parcourt de la boucle du chiffre c ?
Car pour a,b et c fixés, le chiffre d doit être solution de l'équation N + d == S + d^3 où N et S sont les valeurs pour abc0
Ce qui revient à N-S == d.(d^2 - 1)
Les valeurs prises par d.(d^2 - 1) pour d variant de 0 à 9 sont 0, 0, 6, 24, 60, 120, 210, 336, 504 et 720
Donc, si N-S==0 lorsque l'on choisi le chiffre c, alors on sait que seront solutions les nombres abc0 et abc1 obtenus avec d=0 et d=1.
Sinon, rien sert de chercher un potentiel dernier chiffre si lorsque l'on a choisi le chiffre c, la différence N-S n'est pas un multiple de 6.
Vous l'aurez compris, je me réveille et je suis en pleine cogitation MPOesque
Dernière édition par
C.Ret le 02 déc. 2015 19:13, édité 1 fois.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..