Euler 030

Publié le 22/12/16

Donner la liste des entiers positifs qui sont égaux à la somme des puissances cinquièmes de leurs chiffres.
Indication: on considère que 1 n’est pas solution, et la somme des solutions vaut alors 443839.
Si un nombre {n} possède {k} chiffres, la somme {s_{5}(n)} de leurs puissances cinquièmes est inférieure ou égale à {k\,9^{5}}.
Mais si {n} possède k chiffres, il est au moins égal à {10^{k-1}}.
L’égalité {s_{5}(n)=n} est donc impossible si: {k\,9^{5} \le 10^{k-1}}.

Or la suite de terme général {\displaystyle\frac{10^{k-1}}{k\,9^{5}}} est rapidement croissante, et supérieure à {1} à partir de {k=7} comme le montre le calcul ci-dessous.

>>> [(k,round(10**(k-1)/k/9**5,5)) for k in range(1,9)]
[(1, 2e-05), (2, 8e-05), (3, 0.00056), (4, 0.00423), (5, 0.03387), (6, 0.28225), (7, 2.4193)]

Ce qui précède montre donc qu’il suffit de se limiter aux entiers d’au plus six chiffres, et mieux encore aux entiers inférieurs ou égaux à {6\cdot 9^{5}=354294}.

Voici une solution en une seule ligne (on peut évidemment découper ça en plusieurs lignes, mais on a ici une belle application des listes définies en compréhension):

Voici le résultat, obtenu en un peu plus de deux secondes:
>>> from time import perf_counter as pc
>>> t=pc(); euler030(); round(pc()-t,3)
[4150, 4151, 54748, 92727, 93084, 194979]
2.116