Juste par intérêt, j'ai essayé de résoudre un problème de la catégorie "récente" du projet Euler ( séquence de chiffres ). Mais je suis incapable de penser à un moyen de résoudre le problème efficacement. Le problème est le suivant (dans la séquence de questions d'origine, il y en a deux au début, mais cela ne change pas la séquence):
La séquence de somme des chiffres est 1,2,4,8,16,23,28,38,49 .... où le terme de séquence est la somme des chiffres qui la précèdent dans la séquence. Trouvez le terme de la séquence.
La solution naïve ne peut pas être implémentée car elle prend beaucoup de temps. J'ai essayé de réduire le problème à un cas d'exponentiation matricielle (cela prendrait de temps) mais je n'ai pas pu trouver une telle récurrence correspondant aux critères linéaires car la récurrence de cette séquence est assez particulier. On peut voir que la séquence est régie par la récurrence:
où est terme de la séquence et est une fonction qui, lorsqu'elle reçoit un nombre naturel en entrée, renvoie la somme des chiffres du nombre (par exemple ). Ma deuxième approche a été d'essayer de trouver un motif dans la séquence. On peut voir que les premiers termes de la séquence peuvent être écrits commen t h d
a_1 = 1
a_2 = 1 + d( 1 )
a_3 = 1 + d( 1 ) + d( 1 + d( 1 ) )
a_4 = 1 + d( 1 ) + d( 1 + d( 1 ) ) + d( 1 + d( 1 ) + d( 1 + d( 1 ) ) )
a_5 = 1 + d( 1 ) + d( 1 + d( 1 ) ) + d( 1 + d( 1 ) + d( 1 + d( 1 ) ) ) + d( 1 + d(
1 ) + d( 1 + d( 1 ) ) + d( 1 + d( 1 ) + d( 1 + d( 1 ) ) ) )
À partir du modèle ci-dessus, il devient que le terme de la séquence peut être généré par la méthode suivante:
- Écrivez avec un symbole d'addition entre eux. 1
- En laissant le premier , appliquez ensuite la fonction sur les termes suivants puis sur les termes suivants, puis sur les termes suivants et ainsi de suite.d 2 0 2 1 2 2
- Ensuite, appliquez récursivement la méthode ci-dessus sur les arguments de chaque fonction appliquée.
par exemple si n = 3 nous effectuons les manipulations suivantes:
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
1 + d( 1 ) + d( 1 + 1 ) + d( 1 + 1 + 1 + 1 )
1 + d( 1 ) + d( 1 + d(1) ) + d( 1 + d( 1 ) + d( 1 +d( 1 ) ) )
Par programmation dynamique, je peux générer le terme en utilisant la méthode ci-dessus dans le temps , ce qui n'est pas mieux que la solution naïve.
EDIT 1
Une autre chose qui peut être observée est que . Par exemple, . Mais je ne peux pas utiliser ce point. J'ai de nouveau essayé de trouver une relation de récurrence linéaire (pour l'exponentiation matricielle), mais je n'arrive pas à la trouver.
EDIT 2
Voici le graphique lorsque la séquence est tracée pour une plage plus petite (les premiers termes de la séquence sont tracés).
PS: Je sais qu'il n'est pas conseillé de demander des solutions au Project Euler. Mais je veux juste une nouvelle direction ou un indice, car je tourne en rond depuis quelques jours. Si cela est également inacceptable, je peux supprimer la question si elle est suggérée.
You are given a106 = 31054319.
dans le problème Euler d'origine, c'est un indice.