lunes, 27 de septiembre de 2010

507 - Buscando la felicidad

Ya he hablado hace un tiempo de los números felices, también conocidos como números Harshad o números de Niven. Estos números presentan la particularidad de que son divisibles por la suma de sus dígitos, como por ejemplo el  133 que es divisible por 1+3+3 =7, ya que 133=7x19.
Así como hay números felices, al resto de los números los podemos llamar números infelices. Pero como son pocos los que quieren ser infelices, podemos inventar algún método para que estos números infelices pasen a ser felices. 
Una forma de hacerlo sería tomar el número y si no es feliz sumarle a su valor la suma de sus propios dígitos para así obtener otro número y ver si este es feliz, si no lo es, repetimos el procedimiento hasta alcanzar la felicidad.


Por ejemplo el primer número infeliz es el 11, aplicando el procedimiento descripto después de 25 pasos el 11 obtiene la felicidad:

11-13-17-25-32-37-47-58-71-79-95-109-119-130-134-142-149-163-
173-184-197-214-221-226-236-247 (247/13=19)


Algunos números infelices alcanzan la felicidad rapidamente como el 15 que necesita un solo paso, 15+1+5=21 (21  es devisible por 3), o el 19 que necesita dos pasos 19-29-40, claro que hay algunos que tardan bastante como el  4177 que necesita 50 pasos.

¿Cuál es el menor número que necesita 10 pasos para ser feliz?

Basado en una idea de Eric Angelini
Si lo quieres compartir o guardar
Share/Bookmark

4 comentarios:

  1. No quiero estropearlo, con lo que, sin dar la respuesta, este pequeño programita en bash lo da:

    for c in $(seq 0 9); do for b in $(seq 0 9); do for a in $(seq 0 9); do orig=$((c*100+b*10+a)); numero=$orig; divisor=$((c+b+a)); if [ $divisor -eq 0 ]; then continue; fi; infeliz=$((numero%divisor)); vuelta=0; serie=$numero; while [ $infeliz -ne 0 -a $vuelta -lt 100 ]; do numero=$((numero+divisor)); if [ $((numero/1000)) -ne 0 ]; then echo "OJO"; fi; divisor=$(((numero/100)+((numero/10)%10)+(numero%10))); infeliz=$((numero%divisor)); ((vuelta++)); serie="$serie-$numero"; done; echo "Numero: $orig. Vueltas: $vuelta. Serie: $serie"; if [ $vuelta -eq 10 ]; then break 3; fi; done; done; done

    Muy bueno, sí señor.

    ResponderEliminar
  2. El numero es el 142. Maiar, como puedo ver el programa que has comentado?

    ResponderEliminar
  3. Esacto anónimo, 142 necesita 10 pasos para ser feliz

    ResponderEliminar

Si quieres deja un comentario, si la entrada tiene mas de 15 dias deberás esperar a que la autorice y por favor si no tienes gmail deja tu nombre si no quedas como anónimo. Gracias!