Showing posts with label teoría de números. Show all posts
Showing posts with label teoría de números. Show all posts

Saturday, September 21, 2019

Una misteriosa cifra en la teoría de números



6174 no es un número más. Es una cifra que contiene cierta "magia" matemática. Para que entiendas la fascinación de este número considera el siguiente procedimiento:


  1. Elige cualquier número de cuatro dígitos que esté formado por al menos dos dígitos diferentes, incluido cero, por ejemplo 1234
  2. Organiza los dígitos en orden descendente, lo que en nuestro ejemplo quedaría 4321
  3. Ahora, organiza el número en orden ascendente: 1234
  4. Resta el número más pequeño del número más grande: 4321 - 1234
  5. Y ahora repite los tres últimos pasos


Encontrarás que eventualmente, haciendo esto contínuamente, te llevará a la cifra 6174. Por ejemplo, si tomamos el número 3148 y seguimos el procedimiento descrito, tendremos:

8431 - 1348 = 7083
8730 - 0378 = 8352
8532 - 2358 = 6174

Si ahora tomamos el 6174 y le ejecutamos este procedimiento obtendremos:

7641 - 1467 = 6174 y entramos en un procedimiento cíclico infinito.

No importa qué número de cuatro cifras tomemos si éste tiene al menos dos guarismos diferentes. Por ejemplo, el 2007:

7200 - 0027 = 7173
7731 - 1377 = 6354
6543 - 3456 = 3087
8730 - 0378 = 8352
8532 - 2358 = 6174

En la Teoría de Números esto se llama Constante de Krapekar, que descubrió este procedimiento y el hecho de que el resultado llegara, tarde o temprano, a 6174 siempre. Este resultado lo presentó Dattatreya Ramchandra Kaprekar en 1949, en la Conferencia Matemática de Madrás.

Kaprekar fue un maestro de escuela, que falleció en 1986, y le fascinaba la teoría de números, una rama de las matemáticas muy compleja y fascinante. El hallazgo de esta constante ha sido analizada por los matemáticos (https://plus.maths.org/content/os/issue38/features/nishiyama/index) que no se resisten a este tipo de retos. De hecho, a lo más, se requieren siete iteraciones para llegar al número mágico 6174.

A quien le interese el software escrito por La_Morsa, puede descargarlo de este enlace: https://www.mediafire.com/file/5ayvrvxj8cnenga/setup_6174.exe/file

El software está escrito en Delphi y la rutina de procesamiento es recursiva. A quien le interese el código fuente, escríbame a morsa@la-morsa.com

Sunday, July 22, 2018

Un nuevo reto lúdico: los números de Munchhausen




Las matemáticas recreativas siempre presentan posibles retos para la programación. En esta ocasión hablaremos de los curiosos números de Munchhausen y plantearemos el reto a solucionar.

Dice la Wikipedia: "un número de Munchhausen (o Münchhausen) es un número natural n el cual la suma de sus dígitos (en base 10), elevados a la misma potencia de ellos mismos es el mismo número es decir n. Por ejemplo:

3435 = 3^3 + 4^4 + 3^3 + 5^5 = 27 + 256 + 27 + 3125 = 3435.

El término fue una invención del ingeniero y matemático holandés, Daan van Berkel, que en el 2009 estudió este tipo de números. La idea de llamarlos así a estos números se debe a que cada dígito está "elevado" por sí mismo y esto evoca la historia de Barón Munchhausen que se elevó a sí mismo hacia arriba jalando su propia coleta. Como todos sabemos, el Barón de Munchhausen era un mentiroso crónico e inventaba las más increíbles historias, recopiladas en un libro incluso.

La idea de estos números puede dar a un nuevo reto lúdico. Se trata de averiguar cuántos números hay con esta propiedad. El 1, por ejemplo, cumple pues es 1^1 = 1. El segundo número es el 3435 y parece que no hay más. Consideramos normalmente que 0^0 = 1, pero si tomamos la definición "no estándar" de que 0^0 = 0, entonces el número 438,579,088 es también de Munchhausen.

El reto lúdico es pues escribir un programa que dado un intervalo de números naturales, empezando en 1 y terminando en el número que se deseé, el programa encuentre en el menor tiempo posible cuáles son los números de Munchhausen. Aunque ya sabemos la respuesta, el ganador del reto será quien encuentre en el menor tiempo posible el resultado correcto, considerando un intervalo de al menos 10 millones de números: del 1 al 10 millones. Además, el programa deberá usar la definición estándar de 0^0 = 1 y 0^0 = 0, esto, desde luego, por separado.

Cabe señalar que yo ya escribí mi propia versión del reto. En este caso, le puse una opción que me dice qué número está procesando, pero para efectos de mediciones, le puedo quitar eso porque el despliegue de esta información hace mucho más lenta la ejecución del software.


El reto tendrá como premio una taza de la Morsa. Si el ganador es de provincia, se le mandará un USB de 8 GB al menos, porque mandar una taza por mensajería es ridículamente costoso. Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas satisfactorias, ganará quien la haya mandado primero. El ganador cede su código fuente a la comunidad. Es decir, se promueve el código abierto.

Las respuestas al reto deben mandarlas a morsa@la-morsa.com. A quien le interese ver mi programa corriendo, envíeme un mensaje a mi correo y le mandaré el enlace para que lo descarguen y vean mis resultados. ¡Suerte!

Friday, March 08, 2013

Otro reto con la conjetura de Collatz


La conjetura de Collatz es muy sencilla y cualquiera puede entenderla: elíjase un número entero positivo. Si es par, divídalo entre dos; si es impar, multiplíquelo por 3 y súmele uno. A ese resultado proceda de la misma manera. Así, si tomamos, por ejemplo, el número 10, tendremos que es par, entonces dividiremos entre 2, lo cual nos da 5. A ese resultado, multipliquemos por 3 y sumémosle 1. Tendremos como resultado 16. Como es par, entonces tendremos 8, siendo par este dividimos de nuevo entre dos y obtendremos 4. Hacemos de nuevo la división y hallamos 2. Dividamos de nuevo y obtendremos 1. Decimos entonces que 10 es un número maravilloso o de Collatz.

Llegar a probar que 10 es maravilloso lleva 6 pasos: 10 –> 5 –> 16 –> 8 –> 4 –> 2 –> 1. El número 27, por ejemplo, requiere de 111 iteraciones antes de llegar a 1 y es el número de más iteraciones menor de 50. Cuando John Conway (el creador del juego de la vida) explica la conjetura pasa al pizarrón y dice: "veamos qué pasa si usamos un número al azar… digamos 27"…

Se me ha ocurrido un reto de programación, el cual es hacer un programa que nos diga cuál es la secuencia más larga para llegar a 1 -en la conjetura de Collatz, desde luego- que tienen los números del 1 a un millón. El resultado que el programa debe otorgar es cuál número, en el intervalo [1 .. 1,000,000] tiene la secuencia más larga. Cabe decir que hay dos premios fastuosos: una tarjeta SD de 4 GBytes y una taza con el logotipo de La_Morsa. El programa que llegue al número con la secuencia más larga en el menor tiempo posible, se llevará uno de esos premios (eso lo decide el ganador). El segundo lugar, es decir, el segundo mejor tiempo que llegue a la respuesta correcta, se llevará el premio sobrante. Cabe señalar que los programas que se remitan a mi cuenta de correo deben tener el código fuente y las instrucciones precisas para que los pueda probar. Habiendo tantos compiladores y diferentes sistemas, deben decirme qué hacer para compilar y correr el código a concurso (añadiendo una copia del ejecutable).

Así que a afilar sus armas. A programar y a optimizar. Veamos qué dicen nuestros programadores. Yo ya escribí mi propia versión para resolver este problema. A quien le interese el software, puede pedírmelo a morsa@la-morsa.com y a vuelta de correo tendrá el enlace para descargarlo.

Sunday, February 10, 2013

Encuentran el número primo de Mersenne 48


En 1644 Mersenne conjeturó que los números de la forma 2n – 1 eran primos, donde n es un primo. W. W. R. Ball llamó a éstos Números de Mersenne y hasta la fecha los esfuerzos para demostrar esta conjetura han sido vanos De hecho, no se conoce cómo llegó Mersenne a este resultado, ni para cuáles condiciones se cumple Inclusive, hasta 1962 el primo más grande conocido era 244 – 1, el cual es, en sí, un número de Mersenne y consta de aproximadamente 3000 cifras.

Hay una larga historia de los primos de Mersenne, la cual comenzó en 1456 y que sigue hasta nuestros días. Se conocen 47 números primos de Mersenne (el último tiene como n = 43112609, y consta de 12,978,189 de cifras. Fue hallado en el 2008 gracias a los esfuerzos de Smith, Woltman y Kurowski usando GIMPS y PrimeNet, utilizando Prime95, una aplicación gratuita escrita por George Woltman, que es usada por GIMPS (Great Internet Mersenne Prime Search), como un proyecto distribuido dedicado exclusivamente a hallar nuevos primos de Mersenne. Prime95 se refiere al software de Windows y Mac OS X, pero hay una versión para Linux, MPrime, que funciona usando la consola, la línea de comandos. Es idéntica a Prime95, pero no tiene una interfaz gráfica como en sus contrapartes Mac y PC.

Los primeros números de Mersenne, de la forma 2n - 1 son 3, 7, 31, 127, y estos son fáciles de probar en su primalidad porque se pueden hacer las divisiones con los números anteriores al que estamos probando, pero para números muy grandes, el hacer este proceso podría llevar demasiado tiempo. Sin embargo, tenemos buenas noticias para los primos de Mersenne y es que hay una prueba rápida, llamada prueba de Lucas-Lehmer, con la que puede saberse si un número es primo o no. El primo de Mersenne 48 fue hallado por Curtis Cooper, un matemático de la Universidad de Missouri Central. Aquí hablamos de 257,885,161 - 1 y es un número de Mersenne que tiene 17,425,170 de dígitos.

El resultado se obtuvo usando los servidores distribuidos GIMPS. Este proyecto de cómputo distribuido se diseñó para "cazar" los primos de Mersenne y es responsable de descubrir los últimos 10 primos de Mersenne, habiéndose hallado en el 2008 el número 47. GIMPS corre en cerca de 1000 computadoras en diversas universidades y para hallar el primo 48 se necesitaron 39 días de cálculos.

Se verificó el resultado usando un servidor de 32 núcleos en seis días. El descubrimiento hace acreedor a Cooper a un premio de 3,000 dólares, dado por el propio proyecto GIMPS, pero no compite con el premio de la EFF (Electronic Frontier Foundation), que ofrece 150,000 dólares por el primer primo con al menos 100 millones de dígitos, y 250,000 dólares por descubrir el primer primo con al menos mil millones de dígitos. Es interesante hacer notar que desde el punto de vista de la programación, los números de Mersenne son muy simples.


Por ejemplo, en su forma binaria, los tres primeros son 11, 111, 11111, etcétera. En general, 2n-1 es simplemente un número binario con n unos. El hecho es que tenemos primos de Mersenne para n=31, 61 y 127 y frecuentemente son muy útiles cuando se necesita un primo rápidamente. Finalmente, ¿cuáles son todas las cifras del primo 48 de Mersenne?

En el sitio Programming Praxis se reta a los lectores (programadores) a que generen los 17 millones de dígitos. Un programa simple en C no puede hacer esto porque los tipos de los enteros tienen limitaciones evidentes. Pero tal vez usando una biblioteca de números muy grandes, como la Multiple Precision Library de GNU podría ser de gran ayuda.

Friday, April 08, 2011

Software para poner a prueba la conjetura de Collatz


Hace unos artículos (que pueden verse aquí, aquí y aquí), escribí sobre la conjetura de Collatz, también llamada de los "números maravillosos". Este tema -que fue parte de mi desarrollo de la tesis de licenciatura, que trató de autómatas celulares, pretendía usar esa teoría para demostrar que dicha conjetura no puede resolverse por métodos analíticos o algebraicos, sino que en este caso, había que hacer la simulación explícita de cada número para ver si cumplía con la propiedad de ser "maravilloso".

En el software que desarrollé para la tesis, usé listas ligadas en Turbo Pascal, para poner a prueba la conjetura más allá del tamaño máximo de un entero o en el mejor de los casos, un entero largo (longInt). Lo que se necesita es tener arbitrario tamaño de número entero para que el software tenga sentido y pueda uno probar números tan grandes como se deseé o le quepan a la computadora en la memoria.

Sin embargo, de los tiempos de Turbo Pascal a Delphi 7, han pasado algunos buenos años y hay más de una biblioteca de rutinas para trabajar con números grandes, de longitud arbitraria. Hallé en Internet más de un sitio en donde ya existen una serie de rutinas para trabajar con números tan grandes como se le ocurran al usuario. Desde luego que el límite ahora lo marca la cantidad de memoria disponible.

Después de revisar algunos de los sitios en donde había rutinas para manejar números muy grandes, decidí usar la que aparece en este sitio. Y aunque otras rutinas parecían más elaboradas, ésta cumplía con mis necesidades, amén de que seguir el código fuente de las mismas no parece ser muy complicado.


En esencia, las rutinas de esta biblioteca de números muy grandes hace las operaciones aritméticas necesarias procesando arreglos dinámicos en memoria, es decir, arreglos de dígitos, en donde las operaciones aritméticas asociadas se hacen como los seres humanos las hacemos. La diferencia es que aquí la computadora las hace a toda velocidad y si se tiene una máquina verdaderamente rápida, entonces los resultados pueden llegar a ser asombrosamente rápidos.

Como sea, aquí los cálculos se hacen a tal velocidad que en verdad poner a prueba la conjetura de Collatz con números muy grandes no resulta ningún problema.

A quien le interese el programa, incluyendo el código fuente, escríbame a morsa@la-morsa.com y a vuelta de correo recibirá el software.

Friday, April 01, 2011

La imposibilidad de probar la conjetura de Collatz (I)


Hay una insólita clase de problemas aritméticos los cuales pueden ser asociados a un problema computacional de iteraciones, "loops" o "bucles". La idea es generar una serie de enteros de acuerdo a cierta regla. Se pregunta entonces uno, si la serie acabará entrando en uno o más bucles, en los que un conjunto de enteros se va repitiendo periódicamente. Y aunque esto suene difícil de comprender, veámoslo con la "conjetura de Collatz":

Tómese algún número entero positivo. Divídase entre dos si es par; si es impar, multiplíquese por tres y sumémosle uno al producto. Si aplicamos este procedimiento repetidamente,  eventualmente llegaremos a uno. Si esto ocurre, diremos que el número inicial con el que empezamos la secuencia es maravilloso.

Por ejemplo, consideremos el número 12. Como es par, dividámoslo entre 2. El resultado es 6. Como este es par, dividámoslo de nuevo entre dos. El resultado es 3. Este último entero es impar, por lo que procedemos a multiplicarlo por tres y al producto sumarle uno. Hallamos que esto da 10. Ahora bien, como 10 es par, dividimos entre 2. Esto nos da 5, que al ser impar, multiplicamos por 3 y le sumamos uno, lo cual da 16. El 16 lo dividimos entre 2 y nos da 8. Siendo par 8, dividimos entre dos y da 4. Este 4 dividido entre 2 es 2 y como éste resultado es par, dividimos entre 2 de nuevo y nos da 1. Por ende, el 12 es un número maravilloso (aunque yo preferiría llamarle número de Collatz, pues fue quien propuso este problema).

La pregunta fundamental de esta conjetura es la siguiente: Dado cualquier número entero positivo y utilizando el procedimiento descrito, ¿se caerá en a secuencia cíclica 2,1,4,2,1,4,...? Nadie hasta ahora ha podido demostrar que esto ocurra forzosamente. Nadie ha podido, sin embargo, hallar un contraejemplo.

A este problema se le denomina también el problema 3x + 1, el cual se resiste a los esfuerzos por resolverlo.  Según Richard guy, fue propuesto antes de la Segunda Guerra Mundial por Lothar Collatz, hoy matemático de la Universidad de Hamburgo (*), cuando era estudiante. En una conferencia que dio en 1970, H.S.M Coxeter ofreció 50 dólares por una demostración que él pudiera entender y 100 dólares por un contraejemplo.  Tal fue el diluvio de falsas demostraciones que Coxeter no está ya dispuesto a evaluarlas. Parece, en efecto, que es tan fácil cometer sutiles errores en las demostraciones de este tipo como en las del último teorema de Fermat (que a todo esto, ya ha sido demostrado, según entiendo). De hecho, Paul Erdös, en 1982, expresó su opinión (¿y cuál más calificada que la suya?) de que si la conjetura es verdadera, la teoría de números carece hoy de instrumental para demostrarla.

Un grupo de investigadores del laboratorio de inteligencia artificial del MIT ha puesto a prueba, mediante computadora, todos los enteros positivos hasta el 60,000,000, sin encontrar una sola excepción. Se descubrió además que si la regla 3n + 1 utilizada cuando es impar se reemplaza por 3n - 1, el resultado, en valores absolutos, es el mismo que si se comenzase con un número entero negativo y se siguiera la antigua regla.  En este caso se descubrió que todos los enteres negativos hasta -100,000,000 caían en uno de estos tres bucles:

  • 2,1,2,...
  • 5,14,7,20,10,5,...
  • 17,50,25,74,37,110,55,164,82,41,122 61,182,91,272,136,68,34,17,...
Michael Beemer, William Gosper y Rich Schroeppel dan estor resultados en HACKMEM (abreviatura de Hacker Memo), #239, MIT 1972.

Parece que a nadie se le ha ocurrido una feliz idea que permita establecer el caso general para todos los enteros no nulos (el cero pertenece, evidentemente, al bucle 0,0,0,...). Nadie sabe tampoco si hay enteros que generen sucesiones divergentes hacia infinito carentes de bucle.

Así entonces, si se busca un contraejemplo, éste tendría que ser un número que, o bien, fuese generando números siempre mayores, sin repetir jamás ninguno, o bien, cayese en un bucle distinto al 4,2,1. De existir algún contraejemplo, tendría que ser superlativamente grande, porque según Guy, la conjetura ha sido verificada hasta 7x10^11.

Al poco tiempo de empezar este juego, se descubrió que no era preciso ensayar los números pares, ni tampoco los impares de la forma 4k + 1, 16k + 3 o 128k + 1. De este modo, los programas de computadora se abrevian mucho.  Evidentemente, tan pronto como una sucesión tropieza con una potencia  de 2, muchas veces, tras una serie caótica de altibajos, se desploma vertiginosamente hacia 4,2,1. La potenbcia de 2 hacia la que más sucesiones convergen es 16.

Entre los números menores de 50, el de peor comportamiento es el 27. Tras 77 pasos alcanza una cima de 9232. Bastan después 34 pasos para reducirlo a 1. Cuando el matemático John H. Conway presenta en sus lecciones la conjetura 3x + 1, le gusta ir a la pizarra y decir: "tomemos un número al azar, el 27 por ejemplo, y veamos qué sucede".

En el siguiente artículo intentaremos demostrar que la conjetura de Collatz es computacionalmente irreductible, lo cual significa, en otras palabras, que sólo mediante la ejecución explícita para cada número, es posible ver si el número en cuestión es maravilloso o no. Lo que equivaldría a decir que no puede existir una demostración analítica del problema en cuestión.

Lo mejor del asunto es que usaremos la teoría de los autómatas celulares para trabajar con este problema.

(*) Collatz murió en 1990.