Solo por interés, traté de resolver un problema de la categoría "Reciente" del Proyecto Euler ( secuencia de suma de dígitos ). Pero no puedo pensar en una forma de resolver el problema de manera eficiente. El problema es el siguiente (en la secuencia de preguntas original hay dos al principio, pero no cambia la secuencia):
La secuencia de suma de dígitos es 1,2,4,8,16,23,28,38,49 .... donde el término de secuencia es la suma de dígitos que la preceden en la secuencia. Encuentre el término de la secuencia.
La solución ingenua no se puede implementar porque lleva mucho tiempo. Traté de reducir el problema a un caso de exponenciación de la matriz (que tomaría una cantidad de tiempo ) pero no pude encontrar una recurrencia que se ajustara a los criterios lineales, ya que la recurrencia para esta secuencia es bastante peculiar Se puede ver que la secuencia se rige por la recurrencia:
donde es término de la secuencia es una función que, cuando se le da un número natural como entrada, devuelve la suma de dígitos del número (p. ej. ). Mi segundo enfoque fue tratar de encontrar algún patrón en la secuencia. Se puede ver que los primeros términos de la secuencia se pueden escribir como
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 ) ) ) )
A partir del patrón anterior, se convierte en que el término de la secuencia se puede generar mediante el siguiente método:
- Escriba 1 's con el símbolo de suma entre ellos.
- Dejando el primer , luego aplique la función en los próximos términos, luego en los siguientes términos, luego en los siguientes términos y así sucesivamente.
- Luego aplique el método anterior de forma recursiva en los argumentos de cada función aplicada.
por ejemplo si n = 3 realizamos las siguientes manipulaciones:
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 ) ) )
Mediante la programación dinámica puedo generar el término usando el método anterior en el tiempo , que de nuevo no es mejor que la solución ingenua.
EDITAR 1
Otra cosa que se puede observar es que . Por ejemplo . Pero no puedo hacer uso de este punto. Intenté nuevamente encontrar una relación de recurrencia lineal (para la exponenciación de la matriz), pero no puedo encontrarla.
EDITAR 2
A continuación se muestra el gráfico cuando se traza la secuencia para un rango menor (se trazan los primeros términos de la secuencia).
PD: Sé que no es aconsejable pedir soluciones al Proyecto Euler. Pero solo quiero una nueva dirección o una pista, ya que me he estado moviendo en círculos durante los últimos días. Si eso también es inaceptable, puedo eliminar la pregunta si se sugiere.
You are given a106 = 31054319.
en el problema original de Euler es una pista.