lunes, 24 de marzo de 2014

Comprobar conjeturas con hoja de cálculo – Andrica

Esta entrada participa en la Edición 5.2 del Carnaval de Matemáticas cuyo anfitrión es Matesdedavid


Nota importante: Hoy iniciamos una serie sobre conjeturas. Con ella no se pretende impartir teoría ni ilustrar temas de actualidad. Simplemente deseamos hacer ver que cuestiones de índole superior se pueden tratar con instrumentos simples. Si a través de ellos logramos interesar a los lectores para que investiguen más habremos conseguido nuestro objetivo. Como siempre en este blog usaremos la hoja de cálculo, instrumento excelente para presentar propiedades. Para no cansar a los seguidores del blog no las publicaremos de forma consecutiva.


Conjetura de Andrica

La conjetura de Andrica se expresa algebraicamente mejor que con palabras. Si representamos por pn el número primo que aparece en el lugar n de su lista, la conjetura se expresa como

“La diferencia entre las raíces cuadradas de dos números primos consecutivos es siempre menor que 1”

Sobre su historia, autor y algunas consideraciones interesantes, en lugar de copiarlas aquí remitimos a una destacada entrada del blog “Gaussianos” (http://gaussianos.com/la-conjetura-de-andrica-o-que-distancia-hay-entre-dos-numeros-primos-consecutivos/)

Lo que nos interesa en esta entrada tiene carácter más humilde, y es la comprobación de esta conjetura con una hoja de cálculo y nivel medio de dificultad. Para ello necesitas dos funciones: ESPRIMO, que te devuelve si un número es primo o no y PRIMPROX, que encuentra el menor número primo que es mayor que uno dado (sea primo o no). Para evitarte tratar con definiciones de funciones y con el BASIC de las hojas, hemos creado la herramienta conjeturas.xlsm (y conjeturas,ods), que se encuentran en la dirección

http://hojamat.es/sindecimales/divisibilidad/herramientas/herrdiv.htm#conjeturas

La primera hoja contiene el espacio de trabajo, la segunda el catálogo de funciones implementadas y la tercera los enunciados de las conjeturas. Este archivo se podrá ir actualizando sin previo aviso conforme se vayan tratando conjeturas nuevas.

Supondremos, pues, que tienes abierta la hoja conjeturas. Puedes comenzar una tabla en la que figuren en la primera columna todos los números primos (verás cómo) y en la segunda los siguientes primos de cada uno de ellos. Después, en una tercera escribimos la diferencia de las raíces cuadradas de ambos.

Construcción de la tabla

Comienza, por ejemplo, escribiendo un 2 en la celda B2. Usa la función PRIMPROX para escribir el siguiente primo en C4: =PRIMPROX(B4). Evidentemente obtendrás un 3.

En la celda D4 escribe la diferencia de raíces cuadradas =RAIZ(C4)-RAIZ(B4)



Para que puedas extender la tabla hacia abajo, en la celda B5 copia el contenido de la C4, pero como fórmula, =C4. No uses Copiar y Pegar. Obtendrás un 3, como era de esperar.



Con el controlador de relleno copia hacia abajo las celdas C4 y D4



Lo que te queda por hacer es muy sencillo: de nuevo con el control de relleno copia las tres nuevas celdas de la fila 5 hacia abajo hasta el número de filas que desees:



Hemos marcado en negrita la máxima diferencia, y como era de esperar, todas son menores que la unidad.

Aunque ya están publicados, te puedes dar la satisfacción de crear tu propio gráfico, añadiendo, por ejemplo, otra columna con los números de orden:



En el gráfico se aprecia la máxima diferencia antes de llegar al 11 y que la tendencia general es que, con grandes oscilaciones, los valores tienden a cero, lo que da confianza en que la conjetura sea cierta.

Otra interpretación

Si representamos por Dn la diferencia entre dos primos consecutivos
Si la conjetura es cierta se cumple


La diferencia entre dos primos consecutivos siempre es menor que la suma de las raíces cuadradas de ambos.

Es fácil deducir otra expresión más simple:

Puedes crear dos columnas nuevas en tu tabla, una con la suma de raíces y otra con la diferencia de primos consecutivos. Intenta crear un gráfico similar a este:



Contrasta  la “suavidad” de la gráfica de la suma de raíces con la de la diferencia de primos. Hay que tener en cuenta que en la primera cada primo se suma en dos datos consecutivos, lo que produce un efecto de promedio, que oculta algo las irregularidades. Lo importante en este caso es se cumple la desigualdad deducida de la conjetura de Andrica.

Una interesante generalización

Si la conjetura de Andrica es cierta, podemos plantear la ecuación


Tendremos la seguridad de que x estará entre los valores 0,5 y 1. Para cada par de primos consecutivos x tendrá un valor distinto. El máximo lo alcanza para el par (2,3) en el que x=1 y el mínimo en pn+1=127 y pn=113 con x=0.567148... Este valor es conocido como la constante de Smarandache. La tienes en http://oeis.org/A038458

Es muy instructivo el procedimiento que podemos usar para encontrar el valor de x correspondiente a cada par de números primos consecutivos. Podemos usar para ello la herramienta de Búsqueda de Objetivos (lo desarrollamos para Excel, pero es muy fácil trasladarlo a otras hojas)

Tal como se explicó en párrafos anteriores, comienza por crear una tabla de pares de números primos consecutivos. Si te da pereza, usa lo que sigue para un solo par.

En la tabla hemos añadido una columna para x en la que iniciamos con el valor 1. Una cuarta columna la rellenamos con la fórmula p(n+1)^x-p(n)^x. Si la reproduces, comprueba que los valores que obtienes son los que figuran en la imagen.

Búsqueda del valor de x

Usaremos la Búsqueda de objetivos para resolver la ecuación


Elige un par cualquiera, por ejemplo 29 y 31. Señala la celda que contiene el valor 2 para la diferencia de potencias, y busca el procedimiento Buscar Objetivo en la fichas Datos y grupo Análisis Y si…


Ahora, en Definir la celda escribes la que contiene la diferencia 2, como valor escribes 1, porque ese es tu objetivo, y en Para cambiar la celda escribes la celda donde está el valor 1 de la x.
Al pulsar aceptar obtendrás la solución, tal como ves en la imagen:


La solución, 0,84555… está entre 0,5 y 1, tal como habíamos conjeturado.
Toma el par 113 y 127 y obtendrás la la constante de Smarandache con cinco decimales correctos:



El problema está en que has de ver cada par uno a uno, pero para un cálculo conjunto nos tendríamos que complicar el proceso.

Puedes consultar más generalizaciones en http://arxiv.org/ftp/arxiv/papers/0707/0707.2584.pdf


viernes, 14 de marzo de 2014

Restos en la función PRIMO(n)


Seguimos con nuestra tendencia a jugar y experimentar con los conceptos matemáticos. Ahora lo haremos con la enumeración de los números primos, por la que asignamos a cada número natural N el número primo que ocupa el lugar N en su orden natural. Esta función así construida la podemos llamar PRIMO(N), prime(n) en inglés, o, como hemos usado este año en el blog, PRIMNUM(N).  Para simplificar la escritura usaremos P(N).

Esta función, como es de esperar, está bien estudiada. En http://oeis.org/A000040 tienes muchos detalles. Si la representamos (de forma falsamente continua) notamos que es casi lineal, con concavidad hacia arriba.


En la página de OEIS citada se incluye la propiedad de que P(n) es siempre mayor que nln(n). En efecto, si representamos ambas funciones en un mismo gráfico, observamos que son muy similares. Ambas tienden “suavemente” a infinito conjuntamente con n.



Relaciones lineales

Esto nos va a servir para lo siguiente: Para cualquier valor de N, podemos encontrar el cociente entero P(N)\N y el resto correspondiente. Por ejemplo, P(22)=79, porque este es el primo que ocupa el lugar 22. Podemos expresarlo así: 79=3*22+13. Esto siempre es posible, y el cociente entero será igual o mayor que 1, porque P(N)>N. Aquí nos interesará el resto 13.

Todo número primo se puede expresar mediante el cociente entero entre su número de orden y el resto correspondiente.

En la gráfica esto equivaldría a dibujar una línea recta que corta exactamente a la gráfica de los primos en el punto (N,P(N)).

Restos posibles

El resto de la división entera entre un primo y su número de orden puede presentar muchos valores distintos. Vemos algunos de los primos publicados:

2, 3, 11, 13, 37, 43, 1087, 64591, 64601, 64661,… se caracterizan porque su resto respecto a su número de orden es 1. Por ejemplo, 64661 es el primo número 6466 y se cumple que 64661=6466*10+1. Estos números primos los tienes en http://oeis.org/A048891

También aparecen restos 2 (ver http://oeis.org/A156152). Por ejemplo, P(73)=367=73*5+2. Y también 3 (A171430) o resto -1 (A052013)

¿Aparecerán todos los restos si recorremos los números primos y los dividimos entre sus números de orden? En http://oeis.org/A004648 tienes su enumeración ordenada:

0, 1, 2, 3, 1, 1, 3, 3, 5, 9, 9, 1, 2, 1, 2, 5, 8, 7, 10, 11, 10, 13, 14, 17, 22, 23…

Al recorrer los primeros 1000 primos echamos de menos algún resto, como el 18 o el 20 ¿acabarán apareciendo? Para averiguar esto usaremos una técnica similar a otras que han aparecido en este blog: fijamos un número grande, como el 10^6, y para cada valor de resto que elijamos, por ejemplo ese 18 que no aparece, recorremos todos los primos menores que el tope y les calculamos su resto respecto al número de orden. Si aparece  el que queremos, ya lo hemos encontrado; si no, aumentamos el tope. Lo podemos construir en el Basic de las hojas de cálculo:

Public Function primoresto(n)
Dim a, i, p, r
a = 2: i = 1: r = -1: p = -2  Iniciamos la lista de primos y la variable r a -1
While p <> n And i <= 10 ^ 6  Bucle hasta la solución o hasta el tope
p = a - i * Int(a / i)  Buscamos el resto entre el primo a y su orden i
If p = n Then r = a Si el resto coincide con el número propuesto, ya tenemos solución
i = i + 1  Si no, avanzamos en la lista de primos
a = primprox(a)
Wend
primoresto = r
End Function

Si la función devuelve el valor -1, es que no se ha encontrado solución y hay que subir el tope. Con esta función y con Excel, que es una hoja rápida, hemos encontrado estos valores:



Llama la atención el mínimo primo que presenta resto 18. Efectivamente, 176557 es el primo número 16049 y el cociente entre ellos es 11 y el resto 18, como cabía esperar. Más impresionante es el correspondiente a 44, nada menos que 1304867. Para avanzar más hemos traducido el algoritmo a PARI

resprime(n)={local(a,i,r,p);a=2;i=1;r=-1;p=-2;while(p<>n&&i<=10^6,p=a%i;if(p==n,r=a);i+=1;a=nextprime(a+1));return(r)}
{for(i=1,50,print(resprime(i)))}

Con él, subiendo el tope a 10^8, hemos descubierto que el resto 110 no aparece hasta el primo 514279133

¿Existirá siempre un número primo que produzca un resto igual a un número que elijamos? No lo sabemos. Lo dejamos como conjetura:

Conjetura: Para cada número natural n>1 existe un número primo P(k) que produce un resto respecto a k igual a n.

Si alguien sabe algo más lo publicaremos como extensión.


miércoles, 5 de marzo de 2014

Recogida de datos en tablas de marcado de casillas.


Ya hacía tiempo que no dedicábamos una entrada al manejo de las hojas de cálculo sin relacionarlas con el estudio de los números. Lo hacemos hoy con un problema que se presenta al recoger valoraciones cumplimentadas mediante el marcado de casillas.

Cuando se plantea una encuesta de valoración es fácil adivinar la orientación cultural de quien la ha confeccionado. Si es alguien con mentalidad numérica, la crea pensando ya en la recogida de datos y aplicación de medidas estadísticas. Utiliza escalas numéricas o ceros y unos. Por el contrario, personas más cercanas a una cultura de tipo humanístico prefieren esquemas sencillos, visuales y que transmitan bien la idea que se desea valorar.

Una estructura muy usada es la de una tabla de doble entrada en la que se marcan algunas celdas según la valoración deseada. En la imagen presentamos una muy popular, y es la de elegir del 1 al 5, como escala ordinal y subjetiva en las columnas, para la valoración de los aspectos que figuran en las filas.



En una tabla pequeña como esta, los totales por filas y columnas son muy sencillos de obtener, pero imaginemos que se manejan cientos de filas o que se han agrupado muchas encuestas en una, ¿cómo automatizar la traducción del símbolo “*” a datos numéricos? Deseamos dos cosas:

    (a) Crear unas frecuencias en la parte baja de la tabla con los distintos resultados
    (b) Traducir cada asterisco a la valoración numérica entre 1 y 5 correspondiente.

En la imagen recogemos nuestras pretensiones:



Las celdas coloreadas son las que deseamos obtener de forma automática.

Frecuencias por columnas

Con estas no hay problema, pues la función CONTAR.SI nos lo resuelve. En cada columna escribimos algo así como =CONTAR.SI(E5:E921;"*"), donde el primer argumento recorre toda la columna de la tabla y el segundo contiene el símbolo usado.

Como vemos, el problema se resuelve sin dificultad y no le prestamos más atención. Pasamos al otro.

Conversión de un símbolo en una valoración numérica

Este otro problema es más difícil de resolver y con el objeto de repasar técnicas de las hojas de cálculo lo abordaremos de varias formas.

Función COINCIDIR

Es la solución más sencilla, pues esta función nos devuelve la posición del asterisco dentro de la fila, si la organizamos de esta forma:




  • Valor buscado: el símbolo “*”
  • Matriz: La fila en la que estamos trabajando
  • Tipo de coincidencia: Usamos el 0 para que sea de tipo exacto: o es un asterisco o no lo es.

En la celda se escribiría una fórmula similar a esta: =COINCIDIR("*";D5:H5;0)

Este procedimiento tiene la ventaja de poder arrastrar la fórmula hacia abajo, porque sólo maneja referencias relativas.

El inconveniente es que si las puntuaciones no son del 1 al 5, sino otras, como 2,4,5,20, o A,B,C,D…esta técnica nos devolvería el número de orden y no el valor. Esto se puede arreglar con la función INDICE. Buscamos el asterisco con COINCIDIR y después lo volcamos en la primera fila con INDICE para localizar la puntuación.



Para obtener el resultado de la imagen hemos usado este tipo de fórmula:
=INDICE(D$4:H$4;COINCIDIR("*";D6:H6))

Función BUSCARH

Esta función es muy útil en estos casos, pero aquí tiene dos problemas, como veremos. BUSCARH  actúa sobre una matriz recorriendo la primera fila para buscar el valor deseado, y nos devuelve el valor correspondiente en la misma columna pero situado unas filas más abajo.

Primer problema: La fila de búsqueda es siempre la primera de la matriz y la de devolución de valores es otra, pero aquí lo que deseamos devolver, 1, 2, 3, 4 o 5 está precisamente situado en la primera fila. Una solución es copiar esa fila al final de la tabla y tomar nota de donde está situada. En la imagen la hemos copiado en la fila 11



Después el truco consiste en que al dar la fila de búsqueda damos la actual (por ejemplo, para el concepto “Acabado” sería la fila 7 y para la fila de devolución escribimos 12-FILA() y así la hoja cuenta las filas que van desde la nuestra hasta la final situada en el 11 incluida.

Segundo problema: La dimensión de la matriz cambia al rellenar hacia abajo, pero eso no nos va a afectar porque no importa si sobran filas, ya que sabemos que la que nos interesa está siempre en el 11 y el cálculo 12-FILA()  nos garantiza que llegamos a ella.

En resumen, usaríamos una fórmula como esta:

=BUSCARH("*";D8:H14;12-FILA();0)

que es la correspondiente a la fila 8.
Resulta algo artificioso el procedimiento. Se ve que es mejor el que usa la función COINCIDIR. No importa, porque nuestro objetivo es descubrir posibilidades.

¿Qué haría alguien de Matemáticas?

Esto va un poco en broma.

Cambiaría los asteriscos por un 1. Esto se puede conseguir con la orden Reemplazar.



Los huecos se pueden reemplazar por ceros, pero no es necesario. Una vez que nuestra matriz es numérica, para traducir la posición del asterisco a un número basta usar SUMAPRODUCTO, que multiplique la fila actual por la primera, y así sólo aparecerá la puntuación situada en la misma fila que el 1.



Sería una fórmula similar a esta:

=SUMAPRODUCTO(D6:H6;D$4:H$4)

Observa que la primera fila se usa con referencia absoluta, para que al rellenar hacia abajo se conserven siempre las puntuaciones 1, 2,…5.

El problema está en que la persona que haya diseñado la encuesta nos proteste por manipularla. Por eso decíamos que esto se trataba un poco como broma.