La constante de Kaprekar

Os voy a proponer un juego. El mecanismo es el siguiente: escoged cualquier número de 4 cifras que no las tenga todas iguales. Por ejemplo el 5843. Ahora ordenad las cifras de mayor a menor y de menor a mayor, obteniendo así otros dos números de 4 cifras. En este caso 8543 y 3458. Ahora restadlos, y con el número obtenido seguid los mismos pasos. En este ejemplo la cosa quedaría así:

8543-3458=5085
8550-558=7992
9972-2799=7173
7731-1377=6354
6543-3456=3087
8730-378=8352
8532-2358=6174

7641-1467=6174

Si intentáis continuar siempre os quedaréis en el número 6174. Esto ocurre con cualquier número de 4 cifras en un máximo de 7 pasos. Curioso, ¿verdad?.

Pues este número se denomina constante de Kaprekar por su descubridor, el matemático indio Shri Dattatreya Ramachandra Kaprekar. Kaprekar se dedicó principalmente a la teoría de números donde obtuvo ciertos resultados interesantes.

Y uno puede preguntarse: para los números de 4 cifras existe una constante de Kaprekar. ¿Y para el resto?. Pues es sencillo ver que existe una constante de kaprekar para los números de 3 cifras y más complicado ver que también existe para los números de 6, 8, 9 y 10 cifras, pero no para los de 2, 5 ó 7 cifras.

Os animo a que intentéis encontrarla en los casos en los que existe y que nos comentéis vuestros progresos y resultados.

Edito: Error corregido en los cálculos (Gracias Lek)

Autor: ^DiAmOnD^

Miguel Ángel Morales Medina. Licenciado en Matemáticas y autor de Gaussianos y de El Aleph. Puedes seguirme en Twitter o indicar que te gusta mi página de Facebook.

36 Comentarios

  1. Esto me recuerda a otro caso parecido… que, si no me equivoco (ahora mismo no sé dónde tengo los enlaces, ni los apuntes xD) consiste en coger un número cualquiera y sumarle el mísmo número pero “al revés”, por ejemplo:

    elegimos el número 125, le sumamos 521 (125 al revés), ¿entendido?

    Bueno, pues repitiendo ese proceso se llega “casi siempre” a un número capicúa. En el ejemplo sería: 125 + 521 = 646

    Probando con otros números veremos que “casi seguro” se cumplirá, por ejemplo:

    49957 + 75994 = 125951
    125951 + 159521 = 285472
    285472 + 274582 = 560054
    560054 + 450065 = 1010119
    1010119 + 9110101 = 10120220
    10120220 + 2202101 = 12322321 ¡¡CAPICÚA!!

    Como veis el número de pasos puede variar.

    Sin embargo hay algunos casos en los que ese capicúa no parece llegar (incluso recuerdo que en un ordenador se habían llegado a números enormes y nada).

    El primer número que no parece “convertirse” nunca en capicúa es el 89… el segundo su “opuesto” 98. Curiosamente, si comprobamos el número de pasos que se necesitan para “convertir en capicúa a un número” veremos que ese número aumenta poco a poco conforme nos acercamos al 89, luego al 98… y así hasta el siguiente número “no capicuable”.

    ¿Sabéis algo acerca de esto? Recuerdo que me pasé una tarde entera intentando sacar alguna propiedad interesante… y salvo comprobar que los resultados capicúas se van repitiendo, no conseguí nada.

    Muy intersante el post, como lo que ya llevais de blog :)

    Publica una respuesta
  2. Con 5 números la cosa acababa en serie.

    Con 6 números no me ha salido. Se me repite las serie del 885420

    987641 – 146789 = 840852
    885420 – 24588 = 860832
    886320 – 23688 = 862632
    866322 – 223668 = 642654
    665442 – 244566 = 420876
    876420 – 24678 = 851742
    875421 – 124578 = 750843
    875430 – 34578 = 840852
    885420 – 24588 = 860832

    Con 8 números la cosa acaba también en serie del 87654321:

    98764321 – 12346789 = 86417532
    87654321 – 12345678 = 75308643
    87654330 – 3345678 = 84308652
    88654320 – 2345688 = 86308632
    88663320 – 2336688 = 86326632
    86663322 – 22336668 = 64326654
    66654432 – 23445666 = 43208766
    87664320 – 2346678 = 85317642
    87654321 – 12345678 = 75308643

    No sé ver el error (si es que lo hay)

    Salud!

    Publica una respuesta
  3. omalaled, para los de cinco cifras ya había advertido Diamond que no existía, para los de tres cifras sale enseguida.

    Para los que tú propones a mi me pasa lo mismo, veremos si Diamond nos quiere dar la solución, o se la guarda para él.

    Publica una respuesta
  4. Parece que no hay solución para guardarse. Simplemente que me fie demasiado de los sitios donde miré.

    Parece ser que en esos casos se acaba en un ciclo, no en un número. Pro tanto, según lo veo yo, no podríamos habrar de constante de Kaprekar, sino más bien de ciclo de Kaprekar, si existiera esa denominación.

    Aquí os dejo un blog donde han probado con números hasta 10 dígitos y parece ser que siempre se acaba en ciclo.

    Por cierto, para quien sepa programar: supongo que no será demasiado complicado hacer un programa para que haga todos los cálculos y evitarnos tener que hacerlos a mano. He visto por ahí alguno (en el enlace que he puesto viene una web donde parece que se puede descargar algo de ese tipo), pero si estáis aburridos os podíais currar uno y podríamos ver qué sale.

    Yo por mi cuenta voy a ver si localizo a un profesor mío de la carrera que tiempo atrás me dio el código para hacerlo en el Mathematica. Ya os contaré algo.

    Publica una respuesta
  5. Corrígeme si me equivoco, pero ¿no hay un error en el paso 3 al no ordenar el número de mayor a menor?

    Con eso quedaría, a partir de ahí:

    3- 9972-2799=7173
    4- 7731-1377=6354
    5- 6543-3456=3087
    6- 8730-378=8352
    7- 8532-2358=6174

    Un paso menos, que os habíais pasado :)

    Publica una respuesta
  6. Y viendo la propuesta de Diamond y que estoy un poco parado… voy a ver si me lo curro en Java…

    Publica una respuesta
  7. Ups…cierto, se me coló. Ahora mismo lo edito.

    Gracias Lek. Y si haces progresos con el java no dudes en avisarnos

    Publica una respuesta
  8. Pues ya tengo una pequeña versión… se lo envío a neok al correo, que lo he visto rápido en su blog ;)

    Publica una respuesta
  9. mimemist ni mucho menos es invisible. Yo no he dicho nada porque no sé nada del tema, al menos que yo recuerde. De todas formas en cuanto tenga tiempo intentaré buscar algo sobre el tema a ver qué encuentro.

    Lek gracias por el interés. Estoy ansioso por probar el programita.

    Un saludo :)

    Publica una respuesta
  10. Probando acabo de descubrir que en números de 3 cifras es 495, pero números como 556 (565, 655, 545…) dan como resultado 0 al quedar de la primera resta un fantástico 99.

    ¿Sabéis si esa posibilidad existe para 4 cifras y, es más, si podría darse en un paso que no fuera el primero?

    Publica una respuesta
  11. Lek en esos casos que mencionas de 3 cifras, hay cifras repetidas como es el cinco, por lo tanto estás incumpliendo una premisa para hallar la constante.

    Publica una respuesta
  12. que no las tenga todas iguales

    Cumplo la premisa. Lo que pasa es que, además, el resultado de la resta tiene que dar, al menos, 2 dígitos diferentes.

    Para 4 dígitos es lo mismo con 1112 y números así. Pero lo interesante de verdad sería encontrar un número que restándolo diera, por decir, 8889… es decir, que diera el 999 en 2 pasos, en lugar de darlo en uno solo

    Publica una respuesta
  13. Yo creo que Diamond se debió de equivocar, ya que como tú dices eso no daría la constante, debería ser que tenga todas las cifras diferentes.

    En cuanto a tu programa, ¿cómo joroñas se ejecuta? Ya que viene un script para Linux y Windows, todo un detalle, pero no se ejecuta nunca bien.

    He probado:

    > ./script
    > ./script num1
    > ./script num1 num2 (al ver que en el script pasas dos parametros al programa)

    Y me peta diciendo:

    Mete un número perra
    java.lang.NumberFormatException
    at java.lang.Integer.parseInt(java.lang.String, int, boolean) (/usr/lib/libgcj.so.6.0.0)
    at java.lang.Integer.parseInt(java.lang.String) (/usr/lib/libgcj.so.6.0.0)
    at Pruebas.LeKaprekar.calcula(java.lang.String, java.lang.String) (Unknown Source)
    at Pruebas.LeKaprekar.main(java.lang.String[]) (Unknown Source)
    at gnu.java.lang.MainThread.call_main() (/usr/lib/libgcj.so.6.0.0)
    at gnu.java.lang.MainThread.run() (/usr/lib/libgcj.so.6.0.0)

    Publica una respuesta
  14. Tienes que pasarle 2 números. La longitud del número y el número de iteraciones (para números más grandes de 4 cifras no he encontrado ninguna constante, acaban todas en ciclo).

    El número lo saca aleatorio de forma que puedes editar el script y ejecutarlo con valores constantes pero números siempre diferentes. Creo que las instrucciones sí fueron en el correo, ¿no?

    Ah, y por defectos de java, que el número no tenga más de 18 cifras… que, por cierto, da un ciclo muy bonito:

    Iteración n:
    988776555444322110 – 11223444555677889 = 977553110888644221
    Iteración n+1:
    988877655443221110- 11122344556778889 = 977755310886442221
    Iteración n+2:
    988777655443222110 – 11222344556777889 = 977555310886444221

    Publica una respuesta
  15. Por ejemplo, para ejecutar el script, sería:

    ./script.sh 4 7
    ./script.sh 6 125 (termina en un ciclo.)

    Publica una respuesta
  16. Vale, había un par de fallos en el script.

    Uno era por mi Java que está mal instalado y le tengo que meter la ruta entera de dónde está instalado.

    El otro era porque has puesto mal los parámetros del script, no son %NUM sino $NUM.

    A partir de ahí ya me ha funcionado, y aunque yo no lo habría hecho con números aleatorios, sino metiendole un número yo, va de maravilla.

    Publica una respuesta
  17. Aclaración: Si nos da un número con menos cifras que los números del caso que estamos estudiando le tenemos que poner a la izquierda los ceros necesario hasta llegar a ellas. Ejemplo para 3 cifras con el número 565:

    655 – 556 = 099
    990 – 099 = 891
    981 – 189 = 792
    972 – 279 = 693
    963 – 369 = 594
    954 – 459 = 495
    954 – 459 = 495

    y llegamos a la constante de Kaprekar.

    Saludos y ánimo con el programita :) . Luego miraré a ver qué tal va todo

    Publica una respuesta
  18. Mirando por la Wikipedia he encontrado lo siguiente (copipasteo):

    En matemáticas, un múmero de Kaprekar es aquel entero no negativo tal que, en una base dada, los dígitos de su cuadrado en esa base pueden ser separados en dos números que sumados dan el número original. Por ejemplo, el número 703, su cuadrado es 494209. Si separamos 494209 en dos nuevos números, 494 y 209, obtenemos que 494 + 209 = 703. De igual forma, el número 297 también es un número de Kaprekar, ya que es posible descomponer el cuadrado 297^2 = 88209 en 88 y 209.

    ¿Qué tiene que ver esto con lo que comentas arriba? ¿Son cosas diferente?

    Publica una respuesta
  19. Lo primero, revisaré lo del script que dice neok, porque nosotros los generamos automáticamente y no debería dar ese tipo de problemas :S

    Respecto a lo que dice Diamond de los ceros… una cosa a añadir al programa :D

    Publica una respuesta
  20. Caic creo que lo comentas es otro teorema de Kaprekar, que no tiene nada que ver con esto, eso según he leído en la wikipedia son los números de Kaprekar y lo que Diamond posteo es la constante de Kaprekar, parece ser que a Kaprekar le gustaba jugar con los números.

    Publica una respuesta
  21. caic son cosas distintas. Al parecer Kaprekar se dedicó casi principalmente a la teoría de números y realizó varias aportaciones. Y entre ellas están estas dos.

    Gracias por el post que nos has dedicado en tu blog. Saludos :)

    Publica una respuesta
  22. He añadido lo de los ceros y he mejorado alguna cosilla… también he puesto a mano los límites de 18 dígitos y 3076 iteraciones (a partir de ahí, falla, he intentado depurar, pero ni tengo tiempo ni he pasado de 3400 a costa de hundir el rendimiento).

    Ahora estaré ocupadillo, así que si alguien quiere seguir con ello, está en la siguiente dirección:

    http://www.zhube.com/cecuve/file_details.html?id=2680332381947944

    Ah, y he añadido unas pequeñas instrucciones en los scripts ;)

    Publica una respuesta
  23. Joer Lek, te estás pegando un buen curro :) . Muchas gracias.

    A ver si lo pruebo, porque mejorarlo va a ser imposible ya que no tengo ni idea de programación :( .

    Saludos :)

    Publica una respuesta
  24. Bah, es un programa muy sencilluco… nada optimizado y tal, pero cumple su objetivo.

    Ahora se puede ampliar para que busque los números que dice caic, jejeje

    Publica una respuesta
  25. Sí, será sencillo, pero para quien no sabe es complicado :S.

    Respecto a la ampliación, no estaría mal :P . Te vas a hacer experto en programas para este tipo de cálculos :P .

    Publica una respuesta
  26. Luego cerraré el código, lo registraré en la SGAE y os cobraré una pasta, mwuhahahahahaha… forrao… lo estoy viendo xDDDDDD

    Publica una respuesta
  27. No mentes a la SGAE por aquí, no vayan a cerrarnos el chiringo. jajajajaja

    Publica una respuesta
  28. Kaprekar, para cinco dígitos en que no se repitan los cinco. Aunque la teoria dice que para 2, 5 y 7 no hay resultados.

    Desde diferentes numeros y con distintos bucles siempre voy a parar al 53.955, 63954 y 74.943. Salvo el numero 98.888 que da 9999 y por lo tanto cero. el 9 seguido de ochos siempre da nueves y por lo tanto ceros.

    Publica una respuesta
  29. ¿ Porqué Internet Explorer es inseguro y peligroso?.¿ Cómo puedo usar FIREFOX ?

    Publica una respuesta
  30. Busca en internet (google, msn, yahoo, …) sobre tus preguntas y obtendrás las respuestas.

    Publica una respuesta
  31. pues el profesor nos enseño sobre esto y después nos hizo evaluación y la gane porque investigue aquí y gracias que ayuda aunque algunas partes no eran claras pero listo ya supere todo

    Publica una respuesta
  32. /*
    Adaptado a Java en NetBeans por Didier Cordoba
    drcordoba92@Gmail.com
    */
    package kaprekar;

    import java.util.Scanner;

    public class Kaprekar {

    public static void main(String[] args) {

    int a = 0, b = 0, c = 0, d = 0, res, aux, max1 = 0, max2, max3, max4, max, min, ctr;
    System.out.println(“Ingrese un numero de 4 digitos diferentes: “);
    int numero;
    Scanner entradaScanner = new Scanner(System.in);
    numero = entradaScanner.nextInt();
    System.out.println(“Idatos: ” + numero);

    if (numero > 999 && numero 10) {
    res = numero % 10;
    switch (aux) {
    case 0: {
    a = res;
    aux++;
    break;
    }
    case 1: {
    b = res;
    aux++;
    break;
    }
    case 2: {
    c = res;
    aux++;
    break;
    }
    }
    numero /= 10;
    }
    d = numero;

    max1 = a;
    max2 = b;
    max3 = c;
    max4 = d;
    if (max1 != max2 || max2 != max3 || max3 != max4) {
    int k = 0;
    do {
    if (max1 = max2 && max2 = max2 && max2 >= max3 && max3 <= max4) {
    aux = max3;
    max3 = max4;
    max4 = aux;
    }
    k++;
    } while (k <= 3);
    max = max1 * 1000 + max2 * 100 + max3 * 10 + max4;
    min = max4 * 1000 + max3 * 100 + max2 * 10 + max1;

    System.out.println("\n" + max + " " + min);

    ctr++;
    numero = max – min;

    if (numero == 6174) {
    ctr = 11;
    }

    } else {
    System.out.println("\n Error: Los numeros son iguales ");
    ctr = 9;
    }
    } while (ctr <= 7);
    } else {
    System.out.println("\nError: Elnumero no es de 4 digitos");
    }
    System.out.println("\n Constante Kaprecar: " + numero);
    }
    }

    Publica una respuesta

Trackbacks/Pingbacks

  1. Gaussianos » ¿Sabía que… - [...] Los números de Harshad fueron definidos por el matemático indio D. R. Kaprekar, del cual ya hemos hablado en…
  2. Una curiosa propiedad del 123 - Gaussianos - [...] casi como por arte de magia, salen siempre como resultado de dichos cálculos. Números como el 6174 (la constante…
  3. EJE TEMÁTICO 2. PENSAMIENTO LÓGICO MATEMÁTICO | mondragonunadm - […] También me interesó lo de la constante de Kaprekar, nunca había oído hablar de él ni de su constante,…

Puedes utilizar código LaTeX para insertar fórmulas en los comentarios. Sólo tienes que escribir
[latex]código-latex-que-quieras-insertar[/latex]
o
$latex código-latex-que-quieras-insertar$.

Si tienes alguna duda sobre cómo escribir algún símbolo puede ayudarte la Wikipedia.

Y si los símbolos < y > te dan problemas al escribir en LaTeX te recomiendo que uses los códigos html & lt; y & gt; (sin los espacios) respectivamente.

Envía un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *