miércoles, 4 de mayo de 2016

“Palprimos” (primos palindrómicos)

Tomamos la palabra palprimo directamente del inglés, pero si te apetece, nómbralos como primos palindrómicos.

Según se deduce del nombre, los palprimos son números primos capicúas o palindrómicos (nos limitaremos al sistema de numeración en base 10 por ahora), es decir, que se leen igual de izquierda a derecha que de derecha a izquierda.

Los números de una sola cifra se suelen considerar palindrómicos (en realidad, cumplen la definición), por lo que es fácil entender que los primeros palprimos son

2, 3, 5, 7, 11, 101, 131, 151, 181, 191, 313, 353, 373, 383, 727, 757, 787, 797, 919, 929, 10301, 10501, 10601, 11311, 11411, 12421, 12721,…
(https://oeis.org/A002385)

Para identificarlos con hoja de cálculo necesitaremos la función ESPRIMO y la ESCAPICUA. Disponemos de las dos en nuestra colección, por lo que nos limitaremos a copiarlas aquí.

Public Function esprimo(a) As Boolean
Dim n, r
Dim es As Boolean

'Devuelve true si es primo.
es = False
If a = Int(a) Then  ‘Ha de ser entero
If a = 1 Then es = False ‘Casos particulares
If a = 2 Then es = True
If a > 2 Then
If a / 2 = Int(a / 2) Then ‘Descarta los pares
es = False
Else
    n = 3: es = True: r = Sqr(a) ‘Busca posibles divisores
    While n <= r And es = True
    If a / n = Int(a / n) Then es = False ‘Si se encuentra un divisor se declara compuesto
    n = n + 2
    Wend
End If
End If
End If
esprimo = es

End Function


Public Function escapicua(n) As Boolean
Dim l, i, k
Dim c As Boolean
Dim auxi$

  'Convierte el número en texto para lograr más rapidez. Devuelve VERDADERO si es palindrómico o capicúa
  
auxi = haztexto(n) ‘Se puede usar la función STR$ del Basic
l = Len(auxi)
If l < 2 Then
escapicua = False
Else
c = True
i = 1
k = Int(l / 2)
While i <= k And c
  If Mid(auxi, i, 1) <> Mid(auxi, l - i + 1, 1) Then c = False ‘Va comparando cada dígito con su simétrico
  i = i + 1
  Wend
End If
escapicua = c
End Function

Con estas dos funciones podemos encontrar palprimos en cualquier intervalo, contarlos u operar con ellos. Por ejemplo, con esta rutina podemos destacar los existentes en un intervalo:

Sub buscapalprimos()

Dim i,j
i = ActiveWorkbook.Sheets(1).Cells(6, 7).Value ‘Suponemos que el intervalo está
j = ActiveWorkbook.Sheets(1).Cells(6, 8).Value ‘alojado en las celdas G6 y H6.

fila = 15 ‘Inicio del listado

For i = j To l
If esprimo(i) And escapicua(i) Then
ActiveWorkbook.Sheets(1).Cells(fila, 6).Value = i ‘Se presenta e incrementamos la fila
fila = fila + 1
End If
Next i
End Sub

Aquí tienes el listado de los palprimos comprendidos entre 10000 y 11000:

10301
10501
10601

Como ves, muy pocos. Entre 1000000 y 1100000 sólo encontramos estos:

1003001
1008001
1022201
1028201
1035301
1043401
1055501
1062601
1065601
1074701
1082801
1085801
1092901
1093901

Antes de seguir adelante, quizás te hayas percatado de que no existen palprimos con un número de cifras par, porque entonces serían múltiplos de 11, y no primos, como le ocurre a 1771, que es igual a 7*11*23. Así que siempre nos referiremos a un número impar de cifras.

Se ha conjeturado que existen infinitos primos palídrómicos. Unos de los mayores encontrados es


(Tomado de Wikipedia)

Entre los mayores conocidos se encuentra el número de Belfegor, 1000000000000066600000000000001, llamado así por sus referencias al número de la bestia, 666.

La anterior rutina para destacar palprimos en un intervalo se puede transformar en una función que los cuente simplemente, sin tener que mostrarlos. Su estructura sería muy similar:

 Public Function cuentapalprimos(m, n)

Dim i, c
c = 0
For i = m To n
If esprimo(i) And escapicua(i) Then c = c + 1
Next i
cuentapalprimos = c
End Function

Con esta función comprobamos que entre 10000 y 11000 existen tres, que son los que presentamos arriba, y entre 1000000 y 1100000, los catorce reseñados.

Con un poco de paciencia se puede obtener el número de palprimos para cada número de cifras: De tres cifras existen 15, de cinco 93 y de siete 668. El resto requiere de otras herramientas. Tienes los datos en http://oeis.org/A016115

Suma de inversos

Se ha comprobado que la suma de inversos de los primeros palprimos converge a una constante cuyos primeros decimales son 1.32398… Pondremos a prueba la capacidad de nuestra hoja de cálculo: buscaremos los primeros con la rutina presentada más arriba, hallaremos sus inversos y posteriormente la suma de estos. Como la tabla resultará larga, copiaremos sólo los primeros y últimos términos:





Podíamos seguir con más cifras, pero ya vemos la tendencia a la constante límite. Con hoja de cálculo es preferible dejarlo aquí.

Hemos probado con los inversos de los cuadrados y ha aparecido una convergencia más fuerte (como era de esperar) hacia la constante 0,43008339502. Puedes probar otras posibilidades.

lunes, 25 de abril de 2016

Función “parking”



Estudiamos hoy un tema de Combinatoria, que la teníamos un poco abandonada. Se trata de la función “parking”, o arreglos de aparcamiento. El planteamiento es el siguiente:

Imaginemos un aparcamiento de una empresa, situado en una calle estrecha, en la que no es posible dar marcha atrás, y que contiene n aparcamientos, que numeraremos de 1 a n. Podemos pensar que es el inicio de una jornada de trabajo y que suelen aparcar en ella siempre los mismos n coches.

Puede ocurrir que cada coche tenga preferencia por un determinado aparcamiento. Si llega y está libre, lo ocupa, y si no, como no puede retroceder, ocupa el siguiente que esté libre. Esto hace que no todas las preferencias de los coches sean viables. Unamos en un mismo conjunto ordenado las preferencias de los conductores. Por ejemplo, si n = 3, el conjunto ordenado (2, 1, 1)  es viable, porque el primer coche ocuparía el aparcamiento 2, su preferido. El segundo iría al 1, y el tercero, aunque prefiere el 1, ha de irse al 3, pero aparca.

El arreglo (2, 3, 2) no es válido, ya que el primer coche aparca en el 2, el segundo en el 3, pero el tercero, encuentra ocupado su preferido 2 y también el siguiente, y no puede aparcar. Vemos que una hipótesis poco creíble es que cada conductor se dirige a su aparcamiento preferido ignorando los anteriores.

Imaginemos que su empecinamiento le costaría volver a intentarlo y esta vez ocupar el 1 aunque no fuera su preferido, pero esas son las reglas de este juego.

Simulación

Hemos preparado una hoja de cálculo muy simple para que experimentes qué preferencias son válidas. La tienes alojada en la dirección

http://www.hojamat.es/blog/parking.xlsm

Basta escribir en ella dichas preferencias, ajusta el retardo en segundos para ver bien el proceso, y rellenar las preferencias. Al pulsar los botones “Vaciar parking” e “Intento”, se desarrollará, con el retardo que desees, el proceso de aparcamiento.


En la imagen puedes ver el final del proceso con unas preferencias válidas.

Todos los coches han podido aparcar.

En esta otra imagen hemos creado unas preferencias no válidas.



La plaza tercera se ha quedado vacía y el coche G no ha podido aparcar.

Llamamos coches afortunados (“lucky car”) a aquellos vehículos que aparcan donde ellos prefirieron previamente. En el ejemplo de la imagen son afortunados A, B, C, D, E y F. Si las preferencias se repiten, sólo serán afortunados algunos de los coches pretendientes a una plaza. Se llama salto (“jump”) al número de plazas que ha de desplazarse un coche si no logra su plaza preferida. Es evidente que los afortunados presentan un salto igual a cero.

Criterio de validez

Se puede razonar que una función parking es válida si se pueden ordenar las preferencias en orden creciente, y entonces, cada una de ellas es menor o igual que su número de orden. En caso contrario, si una preferencia fuera mayor, se dejaría una plaza vacía aunque entraran todos los coches, por lo que alguno de ellos quedaría fuera. En el anterior ejemplo (2, 3, 2) ordenamos de forma creciente (2, 2, 3) y observamos que no hay forma de llenar la plaza número 1, que quedaría vacía. Por el contrario, si en el orden creciente no se sobrepasa el número de orden, como en (1, 3, 1), o en orden creciente (1, 1, 3),  sea cual sea el orden de entrada, siempre habrá plaza para todos. Si el orden creciente es válido, cualquier permutación del mismo también lo será.

Con esta condición, no es difícil escribir todas las funciones válidas en su forma ordenada creciente. En el caso de 3 serían

(1, 1, 1) (1, 1, 2) (1, 1, 3) (1, 2, 2) (1, 2, 3)

Ahora le aplicamos a cada una las permutaciones posibles, con lo que nos dará
1+3+3+3+6=16 funciones válidas distintas. Coincide este resultado con la expresión


 En este caso (3+1)(3-1)=42=16. Se puede demostrar, mediante teoría de grafos, que esta expresión es válida. En esta dirección puedes leer un esbozo de demostración

http://www-math.mit.edu/~rstan/transparencies/parking.pdf

La idea consiste en añadir otra plaza más de aparcamiento, la n+1 que dejamos vacía, y permitir a los coches otro intento. De esta forma todos aparcarán, aunque se puedan dejar una plaza vacía. El número de opciones ahora será (n+1) elementos para n plazas. El número de funciones es, por tanto, (n+1)n. Si sometemos al proceso a una traslación módulo n+1, sólo será función válida aquella que deje vacía la plaza n+1. Dividimos y queda (n+1)n.

Generación de resultados

Las funciones parking ordenadas se pueden obtener mediante construcción directa, ya que sólo hay que tener cuidado de no sobrepasar del índice i en el término a(i). Para valores de n mayores hemos usado nuestra hoja de cálculo Cartesius (no publicada en este momento). Por ejemplo, en la imagen puedes observar las 14 funciones ordenadas para n=4.



Para n=5 resultarían 42 arreglos. En general, el número de funciónes parking ordenadas coincide con los números de Catalan:

1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862,… (http://oeis.org/A000108).

Como tales, se pueden generar con la fórmula



Por ejemplo, C(4)=1/5C(8,4)=70/5=14


jueves, 14 de abril de 2016

Volvemos a los números "arolmar" (5) - Semiprimos arolmar

Semiprimos arolmar

Esta es la quinta entrada de la serie que dedicamos a estos números de nuestra invención. Si deseas leer las anteriores basta con que señales la etiqueta “Números AROLMAR” en el blog.

Proseguimos en esta entrada el regreso a los números arolmar que emprendimos en las anteriores. En esta nos dedicaremos a estudiar los términos de la sucesión que son semiprimos. Hemos descubierto que son bastante interesantes, ya que dan lugar a propiedades curiosas.

Caso de dos factores primos

En esta sucesión de números arolmar https://oeis.org/A187073 es fácil encontrar los términos que son semiprimos:

21, 33, 57, 69, 85, 93, 129, 133, 145, 177, 205, 213, 217, 237, 249, 253, 265, 309, 393, 417, 445, 469, 489, 493, 505, 517, 553, 565, 573,…



Vemos en el listado que todos se descomponen en dos factores primos distintos (el 1 que les acompaña es el exponente). En ellos la suma de sus dos factores primos es evidente que equivale al doble de otro primo. Consecuencia inmediata es que en estos números la suma de sus factores primos presenta al menos dos soluciones para lo exigido por la conjetura de Goldbach. Por ejemplo, 205=5*41, y 46=5+41=23+23=2*23

Ambos primos han de ser del tipo 4k+3 o del tipo 4k+1, pues si fueran de tipos distintos, su suma sería equivalente a 4k+1+4p+3=4(k+p+1), un múltiplo de 4 que no puede ser doble de un primo. Por ejemplo, en 133=7*19, 7=4*1+3 y 19=4*4+3, y en 445=5*89, 5=4*1+1 y 89=4*22+1, ambos del mismo tipo. Sin embargo, respecto al 6, los factores admiten todas las variantes, como puedes comprobar fácilmente.

Por otra parte, los dos factores de un semiprimo arolmar no pueden ser primos consecutivos, ya que la media de ambos está intercalada entre ellos.

Así que a cada número de esta lista le corresponderá un número primo, la mitad de la suma de sus factores. Esta relación no tiene que ser biyectiva. Por ejemplo, los términos 93, 145 y 253 se corresponden con el 17. Compruébalo con sus factores primos:

93    [3,1][31,1]       17
145 [5,1][29,1]       17
253 [11,1][23,1]     17

Número arolmar correspondiente a un primo

Se puede ver la correspondencia desde el punto de vista opuesto. Podemos tomar un número primo, calcular su doble y descomponerlo en todas las soluciones posibles como suma de primos diferentes. Cada una de ellas, multiplicando ambos primos, producirá un arolmar.

(Ver en el documento de Rafael Parra http://www.hojamat.es/parra/arolmar.pdf la explicación de este proceso con el estudio de varios casos)

Por ejemplo, tomemos el 23. Su doble, 46, se puede descomponer como suma de dos primos diferentes así: 46=3+43=5+41=17+29. Si ahora multiplicamos los dos factores de cada descomposición, nos resultarán tres números arolmar: 129, 205 y 493.

La correspondencia entre números primos y números arolmar semiprimos no es biyectiva.

En el documento de Rafael Parra se consideran todos los casos similares, se descompongan en dos o en más sumandos primos. Ahora nos limitaremos al caso de dos factores.

Número arolmar mínimo y asociados para un primo dado.

Siguiendo las ideas del documento citado de Rafael Parra, si de todos los números arolmar que se corresponden con un primo dado eligiéramos el mínimo (en el ejemplo anterior el 129) sí podríamos establecer la correspondencia biyectiva. Es fácil ver, como sugiere Rafael Parra, que basta elegir el que posea el número primo menor en una descomposición en dos factores, en el ejemplo 129=3*43.

Con un poco de álgebra es fácil demostrarlo: llamemos P a ese factor primo mínimo (será P<N/2) y N al doble del primo dado. El número arolmar generado será entonces P(N-P), mientras que todo otro número de ese tipo tendrá la expresión (P+k)(N-P-k) con 0<P+k<N/2 (si suponemos los factores ordenados). Restamos ambas expresiones:

(P+k)(N-P-k)- P(N-P)= PN-PP-Pk+kN-kP-kk-PN+PP=k(N-P-P-k)=k(N/2-P+N/2-(P+k))>0

Luego (P+k)(N-P-k) es siempre mayor que P(N-P). Si aumentamos el número de factores, el número arolmar correspondiente sería aún mayor, luego este semiprimo con un primo mínimo es el menor posible.

Así que el número arolmar mínimo asociado a cualquier número primo es el que contiene el factor primo menor posible en una descomposición con dos factores. Podemos resumir el proceso mediante este esquema:



Tomamos el primo 73, le calculamos el doble 146, ensayamos sumas de primos para él y nos quedamos con la que presente el menor primo. En este caso 7+139. Multiplicamos ambos y nos resulta 973.

Dado un primo P y su número arolmar asociado R, se tendrá, si sólo posee dos factores, que R=(P+K)(P-K), siendo ambos paréntesis primos, es decir P2-K2 con un K adecuado, siempre par. Por tanto R estará siempre acotado por P2

Rafael Parra ha llamado a estos números mínimos “primos arolmar”, y al resto, no minimales, “asociados”. En la secuencia publicada por él (http://oeis.org/A191683) figuran todas las soluciones para cada primo mayor que 3 y para cada número de sumandos:

21, 33, 57, 69, 93, 105, 129, 177, 195, 213, 217, 237, 249, 265, 309, 393, 417, 445, 465, 483, 489, 565, 573, 597, 633, 645, 669,…

Es evidente que es una subsecuencia de la sucesión A187073. Como nos hemos comprometido en esta entrada a un desarrollo limitado a los semiprimos, seguimos con esa condición. Veremos lo siguiente:

A cada número primo le corresponde un único “primo arolmar” semiprimo

Esto es fácil de entender, pero la característica de ser únicos convierten a estos números en imágenes de una función. Podemos definir PRIMAROL a la función que hace corresponder a cada número primo el semiprimo ya definido.

Un ejemplo:

Elegimos el número primo 103. Su doble, 206, admite estas descomposiciones de dos sumandos primos (recuerda que nos limitamos a este caso, pero podrían ser 3 o más)

7 199 1393
13 193 2509
43 163 7009
67 139 9313
79 127 10033
97 109 10573

Elegimos el mínimo, 1393, y lo definiremos como primarol(103)=1393.

La formación de PRIMAROL queda clara con el esquema incluido más arriba. No está definida ni para el 2 ni para el 3. La razón es que detrás de todo esto está la conjetura de Goldbach. Esta correspondencia biyectiva nos demuestra que los conjuntos de números arolmar y primos arolmar es infinito, hecho que se podía adivinar observando su evolución.

Implementación en una hoja de cálculo

No es difícil implementar esta función en Basic si cuentas con la función ESPRIMO

Public Function primarol(a)
Dim i, p, k, n
Dim novale As Boolean

k = 2: p = 0: n = a * 2
novale = True
While novale And k < n / 2 ‘Buscamos la primera suma de primos
If esprimo(k) And esprimo(n - k) Then
p = k * (n - k) ‘Hemos encontrado la suma. Como sólo queremos el mínimo, paramos.
novale = False ‘Señal de parada
End If
k = k + 1
Wend
primarol = p ‘La función recoge el producto más pequeño
End Function

Esta función no conserva el orden, pues a mayor número primo no le corresponde una imagen también mayor. Por ejemplo, el 217 aparece como imagen de 19 y más adelante el 129 como imagen de 23

La función primarol no es creciente.

Lo puedes comprobar con este gráfico de dispersión:



El máximo que destaca corresponde al primo 1321, cuyo doble 2642 se descompone en la suma 2642=103+2539, que da el semiprimo minimal 261517=103*2539

Estudio con PARI

Para quien tenga una cierta experiencia en el tema, no es difícil traducir el código de primarol a PARI:

primarol(a)={local(k=2,p=0,n=a*2,v=1); while(v>0&&k<n/2, if(isprime(k)&&isprime(n-k),p=k*(n-k);v=0);k+=1);p}

Con esta definición podemos, por ejemplo encontrar la imagen del primer primo de 7 cifras:

Primarol(1000003)=6000009=3*2000003

Relación con ternas de primos en progresión

Es evidente, según lo tratado hasta ahora, que los números arolmar semiprimos se basan en una progresión aritmética formada por una terna de números primos, pues en ese caso el primo central será la media aritmética de los otros dos. Así por ejemplo, 3, 13 y 23 forman el número arolmar semiprimo 3*23=69 y, al contrario, cualquier otro elemento de la sucesión, como 669=3*223, da lugar a la progresión 3, 113, 223. Así que, de paso, hemos comprobado que existen infinitas ternas de primos en progresión aritmética.

Un caso especialmente llamativo es el de los primos equilibrados: 5, 53, 157, 173, 211, 257, 263, 373, 563, 593, 607, 653, 733, 947, 977 (http://oeis.org/A006562)

En ellos los integrantes de la terna son el anterior y posterior primo al central y darán, según consideraciones que hemos visto en párrafos anteriores, el mayor número arolmar correspondiente al primo central. Formamos una tabla:



En ella vemos el rápido crecimiento, por ser maximales los números generados por este procedimiento.

jueves, 7 de abril de 2016

Comprobar conjeturas con hoja de cálculo: Opperman

Conjetura de Oppermann

Esta conjetura está relacionada con otras tres que ya hemos estudiado en este blog:

Legendre 

http://hojaynumeros.blogspot.com.es/2014/04/comprobar-conjeturas-con-hoja-de.html

Andrica

http://hojaynumeros.blogspot.com.es/2014/03/comprobar-conjeturas-con-hoja-de.html

Brocard 

http://hojaynumeros.blogspot.com.es/2014/05/conjetura-de-brocard-y-otras-cuestiones.html

La primera afirma que entre dos cuadrados consecutivos n2 y (n+1)2 existe siempre un número primo, la de Andrica que “La diferencia entre las raíces cuadradas de dos números primos consecutivos es siempre menor que 1” y la de Brocard que “Para n>1, si representamos como p(n) al enésimo número primo, se verificará que entre p(n)2 y p(n+1)2 existirán al menos cuatro números primos”.

En las entradas enlazadas se estudian las tres y sus relaciones mutuas.

Conjetura de Oppermann

Esta conjetura está muy relacionada con las tres referidas, y es una condición más fuerte que ellas. Fue establecida por Opperman en 1882.

Afirma lo siguiente:

Para todo número entero x>1, existe al menos un número primo entre x(x - 1) y x2, y otro primo entre x2 y x(x + 1).

El que tenga un carácter más fuerte proviene de que x(x-1)>(x-1)2 y  x(x+1)<(x+1)2, con lo que los intervalos en los que se ha de encontrar un número primo se acortan.

Observamos que tanto x(x-1) como x(x+1) son números oblongos, y además consecutivos, siendo x2 la media de ambos.

Al igual que nos ocurrió con la conjetura de Legendre, si usamos la función p, que da la distribución de los números primos (p(200) equivaldría a los primos que existen menores o iguales a 200), la conjetura de Opperman se podría expresar así:


Lo interesante aquí es que las desigualdades son estrictas, lo que indica que existen números primos intercalados, que es lo que afirma la conjetura.

Comprobación de la conjetura

Como en anteriores entradas de esta serie, usaremos nuestra herramienta conjeturas.xlsm, que puedes descargar desde la página

http://www.hojamat.es/sindecimales/divisibilidad/herramientas/herrdiv.htm

Esta hoja posee algunas funciones interesantes, aunque el trabajo de comprobación depende de nosotros. Hemos construido un esquema que nos permitirá la comprobación. Puedes intentarlo también. El nuestro es así:



En primer lugar se ha diseñado la cabecera, de forma que contenga los tres valores que figuran en la conjetura, N(N-1), N2 y N(N+1). Entre ellos se han reservado dos columnas para que aparezcan los números primos que anuncia la conjetura.

La estructura es muy sencilla. Todo depende del número que escribamos en la parte superior izquierda, en la imagen el 100. Debajo de él figurarán automáticamente los siguientes. Esto no es necesario, bastaba con un número, pero así percibimos mejor la potencia de la conjetura. Hemos programado que cada celda sea igual a la anterior más una unidad.

Las columnas N(N-1), N2 y N(N+1) son fáciles de rellenar en una hoja de cálculo y no las explicaremos. Las correspondientes a los primos que se esperan las hemos rellenado con la función PRIMPROX, que nos da el próximo primo mayor que un número. En la segunda columna aparecerá PRIMPROX(N(N-1)) y en la cuarta PRIMPROX(N2).

Esta función nos da el primer primo entre esos números, pero con eso nos basta, ya que sólo deseamos resaltar que existe uno al menos. Si hubiera más, aparecería el primero de ellos.

Bastará ahora elegir números más pequeños o mayores para que verifiquemos la conjetura en casos particulares.



Forzamos la hoja de cálculo con números mayores:



Si forzamos un poco más, ya no podemos contar con el cálculo en números enteros, y la hoja nos da error:



Esto es normal y lo tenemos asumido en este blog. No pretendemos grandes cálculos, imposibles con el formato de coma flotante, sino crear esquemas que nos ayuden a entender mejor las conjeturas.

La conjetura afirma la existencia de un número primo, pero en la práctica pueden aparecer muchos más. En la imagen que sigue hemos usado la función PRIMENTRE, que también está incluida en la hoja Conjeturas, y se puede observar que el número de primos es considerable.



Relación con la espiral de Ulam

Si observamos una imagen de la espiral de Ulam, nos daremos cuenta de que la conjetura que estudiamos viene a decir que cada lado de dicha espiral ha de contener un número primo.



Ya sabemos que pueden existir más. La imagen está tomada de nuestro documento

http://www.hojamat.es/sindecimales/divisibilidad/propuestas/rutas/htm/ulam.htm

que puede tener los vértices algo desplazados, pero se ven con claridad los distintos oblongos y cuadrados de cada lado y los primos comprendidos entre ellos.

Conjetura de Schinzel

Se puede afinar más la conjetura de Opperman. Schinzel conjeturó que para x>8, existe al menos un número primo entre x y x+(lnx)2.

Te invitamos a comprobarlo. En la imagen puedes ver cómo lo hemos hecho en este blog:




miércoles, 23 de marzo de 2016

Volvemos a los números "arolmar" (4) ¿Qué hay entre dos arolmar?


Esta es la cuarta entrada de la serie que dedicamos a estos números de nuestra invención. Si deseas leer las anteriores basta con que señales la etiqueta “Números AROLMAR” en el blog.

Una cuestión que ya estudiamos en otra entrada respecto a los números primos, la aplicamos hoy a los números arolmar. Deseamos saber qué hay entre dos arolmar consecutivos, por ejemplo si hay primos, cuadrados, triangulares y otros. La frecuencia de nuestros números es similar a la de los números primos, por lo que los resultados mostrarán similitudes. Comenzamos con los cuadrados.

Cuadrados entre dos arolmar

En la primera entrada de esta serie

http://hojaynumeros.blogspot.com.es/2015/12/volvemos-los-numeros-arolmar-1-historia.html

definimos la función esarolmar, tanto para Basic VBA como para PARI. Ahora necesitaremos la función proxarol, que devuelve el primer arolmar que sigue a cualquier número:

Function proxarol(a) As Long (Versión para VBA)
Dim p, prim As Long
Dim sale As Boolean

p = a + 1: sale = False: prim = 0
While Not sale
If esarolmar(p) Then prim = p: sale = True
p = p + 1
Wend
proxarol = prim
End Function

No necesita mucha explicación para entender el proceso: va avanzando en los números siguientes al dado hasta encontrar el primer arolmar.

La función en PARI, basada en la ya definida esarolmar, quedaría así:

proxarol(n)={local(p=0,k);k=n+1;while(p==0,if(esarolmar(k),p=k);k+=1);p}

Con esta función podemos investigar qué tipo de números se puede encontrar entre dos arolmar consecutivos. Comenzamos con los cuadrados. En Basic se puede programar así:

Function num_entrearol(n, tipo)
Dim nm, p, i
nm = 0

If esarolmar(n) Then
p = proxarol(n)
For i = n + 1 To p - 1
Select Case tipo
Case 1: If escuad(i) Then nm = nm + 1
Case 2: If estriangular(i) Then nm = nm + 1
End Select
Next i
End If

num_entrearol = nm
End Function

Está preparada para contar cuadrados, triangulares u otros según el tipo. En el listado nos hemos limitado a los casos cuadrado o triangular. También se adapta a PARI, pero no lo incluimos por no alargar.

Al recorrer esta función para cuadrados en todos los números arolmar nos llevamos una sorpresa: entre dos arolmar consecutivos aparecen como mucho dos cuadrados. En efecto, aquí tienes el listado para los primeros:



De hecho, el valor de 2 sólo se alcanza en el 33 y el 309. En el resto sólo se han encontrado o un cuadrado o ninguno. Una causa probabilística de esto es que los cuadrados se van espaciando, para cada N en un incremento de 2N+1, mientras que los arolmar siguen un crecimiento aproximadamente lineal con incrementos próximos a 17. Hemos probado hasta 10^7 sin encontrar dos arolmar consecutivos entre los que existan tres cuadrados. La cota se queda en 2 para los casos citados. El 309 lo volveremos a encontrar más adelante, ya que presenta una diferencia grande con el siguiente arolmar.

Expresamos la conjetura:

Entre dos números arolmar consecutivos mayores que 309, existe a lo más un cuadrado.

Triangulares comprendidos

Esperamos aquí un fenómeno similar, ya que los triangulares crecen con incrementos también crecientes. Acudimos al programa en Basic y nos queda:


Descubrimos un 3, lo que es lógico, ya que los triangulares dejan intervalos entre ellos más pequeños que los cuadrados. Con el valor 3 aparecen los mismos números que en el caso de los cuadrados: el 33, que está seguido por los triangulares 36, 45 y 55 antes de llegar al siguiente arolmar 57, y el 309, seguido de 325, 351 y 378.

Esto nos hizo sospechar que nunca se daría el valor 4. Hemos adaptado nuestro código en PARI y, en efecto, para n<10^7 no se presenta ningún 4. Lo damos por bueno, como conjetura:

Entre dos números arolmar consecutivos mayores que 309, existen a lo más tres triangulares.

¿Ocurrirá algo parecido con los oblongos, dobles de triangulares o los poligonales?

Así es: sólo en los valores 33, 265 y 309 se intercalan 2 oblongos. Hemos buscado el valor 3 y no aparece. Con los pentagonales sólo poseen el valor 2 los ya sabidos 33 y 309. Prueba con otros tipos, pero por nuestra parte ya está bien. Hemos descubierto de paso que estos números 33 y 309 presentan un comportamiento especial.

Primos intercalados

Vimos en entradas anteriores que el ritmo de aparición de primos y de números arolmar es parecido. Por eso no debe extrañar que se den muchos valores distintos al contar primos entre dos arolmar consecutivos. Desde 0 hasta 30 aparecen para números inferiores a un millón. Aquí tienes los primeros:



Llama la atención que de nuevo el 309 destaca, en este caso por tener 14 primos intercalados hasta el siguiente arolmar 393. No es nada extraordinario, pues un par que está distanciado entre sí.

Potencias de primo

Si en lugar de contar primos contamos sus potencias no triviales (de exponente mayor que 1), el número de intercalados disminuye bastante:



Entre 21 y 33 aparecen 5^2, 3^3 y 2^5, y entre 105 y 129, 11^2, 5^3 y 2^7. Detrás de estos hay que saltar al 2173 y no aparecen más, al menos hasta 10^7.

Consideraciones probabilísticas nos llevan a pensar que no hay más casos.

Como resumen destacamos que el comportamiento de los intervalos entre arolmar es bastante parecido al comprendido entre primos, pero con las frecuencias de aparición un poco mayores.













jueves, 17 de marzo de 2016

Una curiosidad sin importancia

El día 11-2-16, publiqué en Twitter, según acostumbro, y  como una curiosidad, el siguiente desarrollo para esa fecha, escrita como 11216:


Una vez publicado me di cuenta de que cualquier número entero se puede expresar de forma parecida, eligiendo bien el factorial y el exponente racional de e. Es una mera curiosidad, sin valor teórico, pero que nos permitirá repasar algunas técnicas matemáticas.

Buscamos, pues, una expresión del tipo

Obtención del factorial

El cálculo del factorial lo puedes resolver mentalmente, como por ejemplo, en el caso de 6000, el factorial más cercano inferiormente es 7!, pero si deseas automatizarlo, deberás tener en cuenta el crecimiento tan rápido de los factoriales, que pueden sobrepasar la capacidad de una hoja de cálculo. Para obviar esto, podríamos averiguar el valor de a! por divisiones sucesivas. Lo Intentaremos, como muchas veces organizamos en este blog, mediante técnicas cada vez más automatizadas. Prescindiremos por ahora de la función Int.

Con cálculo de celdas

Basta con que observes esta imagen para darte cuenta de los sencillo de esta técnica de obtención del factorial más cercano a N:



Este ejemplo está diseñado para el número 239881. En cada celda de la columna de la derecha hemos escrito una fórmula similar a esta:

=SI(celda de arriba>=celda de la izquierda;celda de arriba/celda de la izquierda; " ")

Es una condicional, en la que, si la celda de arriba es mayor o igual que la de la izquierda, se intenta seguir dividiendo entre 1, 2, 3,…a, y, en caso contrario, se deja la celda en blanco. Ese blanco es el causante de que abajo aparezca el error #¡VALOR! En la imagen queda claro que el factorial correspondiente a 239881 es el 8. El cociente marcado en color, 5,94942956, es importante, porque coincide con el factor exponencial.

Mediante una función

Este proceso de divisiones sucesivas se puede automatizar con dos funciones, una que nos devuelva el factorial y otra que calcule el factor exponencial. En el Basic de las hojas de cálculo podría ser esta, en la que hemos reunido las dos funciones mediante el parámetro tipo, que si le damos el valor 0 nos devolverá el factorial, y con otro valor, el factor exponencial:

Public Function sacafactorial(n, tipo)
Dim p, v
p = 1: v = n
While v >= p ‘divisiones sucesivas para obtener el factorial
v = v / p: p = p + 1
Wend
If tipo = 0 Then sacafactorial = p - 1 Else sacafactorial = v
End Function

Es sencilla y rápida, y nos permite calcular estas dos cantidades para cualquier entero. En el siguiente esquema hemos añadido el exponente de e, que será objeto de la segunda parte de nuestros cálculos.



Si retrocedemos al cálculo con el que iniciamos esta entrada, comprobaremos que el exponente 0,79993525 está muy cercano a 4/5, que era la fracción propuesta. Volvamos al segundo ejemplo:



Aquí el exponente es 1,78329534. El problema ahora es aproximarlo con el número racional más sencillo posible. Para ello disponemos de una herramienta muy poderosa, las fracciones continuas. Puedes descargarte esta hoja antes de seguir leyendo:

http://www.hojamat.es/sindecimales/aritmetica/herramientas/herrarit.htm#fraccont

Las fracciones continuas permiten una aproximación racional a cualquier número real, con la ventaja de darte diversas aproximaciones con exactitud creciente. Abre la hoja y comprobarás que está diseñada para aproximar racionales con racionales, pero “la engañaremos”.


Basta con que en el numerador escribamos el exponente que obtuvimos más arriba, 1,78329534, y como denominador un 1.



De esa forma obtendremos aproximaciones racionales cada vez mejores de ese exponente:


Ahora interviene la parte entera. Debajo de cada aproximación escribimos la expresión del principio



En lenguaje de hoja de cálculo sería

=FACT(8)*EXP(celda de arriba)

Quedaría así (destacamos los más aproximados):


Vemos que el producto más sencillo que al aplicarle la parte entera se convierte en el resultado deseado es 239881,0882, que corresponde al exponente 790/443, siendo los siguientes más exactos, pero también más complejos. Así que nos quedamos con ese:


Lo comprobamos con la misma hoja de cálculo y la fórmula

=ENTERO(FACT(8)*EXP(790/443)) 

obteniendo el resultado deseado de 239881.

Ya afirmamos que el trabajo de hoy no era trascendental, pero es atractivo poder expresar cualquier número entero mediante un factorial, un numerador y un denominador, y además con infinitas soluciones, aunque nos quedemos sólo con la más simple.

Por ejemplo, un millón se puede expresar como



Y aproximando a un racional el exponente:





O en lenguaje de celdas:

=ENTERO(FACT(9)*EXP(16965/16736))

Para terminar, aquí tienes los números con desarrollos más simples, exponentes 1, 2, 1/2 y 2/3



Lo dicho, una entretenida curiosidad sin importancia.

jueves, 10 de marzo de 2016

Sucesión de Mian-Chowla


Esta sucesión se define por recurrencia de dos formas equivalentes:

(a)  a(1) = 1,  a(n) es el menor número mayor que a(n-1) tal que todas las sumas a(i)+a(j) con i, j £ n son distintas.

(b) a(1) = 1,  a(n) es el menor número mayor que a(n-1) tal que todas las diferencias a(i)-a(j) con i,j£n i>j son distintas.

Aquí trabajaremos con la primera.

Pertenece al rango de problemas y conjuntos de Sidon, matemático que estudió las cuestiones sobre sumas o diferencias todas distintas, Puedes leer nuestra entrada

http://hojaynumeros.blogspot.com.es/2010/03/jugamos-con-sidon-y-golomb.html

Los primeros elementos son 1, 2 , 4, 8, 13, 21, 31, 45, 66,...
http://oeis.org/A005282

Comprobemos la definición con el 8: Los términos anteriores (1, 2, 4) producen las siguientes sumas 2, 3, 4, 5, 6, 8. Deberíamos ahora probar con el siguiente número, el 5, pero este produce la suma 1+5=6, que ya está en la lista, luego no es válido. Probamos el 6, y la suma 2+6=8 lo invalida. El 7 tampoco pertenece a la sucesión, ya que 1+7=8 pertenece a la lista de sumas. Probamos el 8, que produce las sumas 9, 10 y 12, no incluidas en la lista, luego el 8 es válido y se incorpora a la lista.

Generación con hoja de cálculo

Para generar esta sucesión necesitamos definir una matriz  en la que almacenar las distintas sumas que hay que considerar. Se puede aprovechar el hecho de que una vez calculadas las sumas para a(n-1), se pueden usar también para a(n), con lo que en cada iteración aparecerán n sumas nuevas. Esto nos puede llevar a usar una columna de hoja de cálculo como matriz que almacene las sumas previas a cada elemento. Así lo hemos implementado, como puedes ver en la imagen (más adelante explicaremos cómo conseguimos que aparezcan):



En la columna de la izquierda hemos ido acumulando sumas, y en la de la derecha, elementos de la sucesión. Así, la suma 2 pertenece al elemento 1. Al incorporar un nuevo elemento, en este caso el 2, se incorporan las sumas 3 y 4. Con el elemento 4, las sumas 5, 6 y 8, y por último, con el 8, las restantes 9, 10, 12 y 16.

¿Cómo conseguimos la aparición automática de elementos y sumas nuevas?

Hemos diseñado un botón que en cada pulsación incorpora un elemento nuevo en la columna (o matriz) de elementos y las correspondientes sumas en la columna de la izquierda.

La idea es esta:

Comenzamos con a(1)=1 s(1)=1

Para cada posible elemento nuevo, ensayamos en primer lugar el valor a(n-1)+1. Si ese valor produce sumas distintas a las ya existentes, lo aceptamos e incorporamos a la lista. En caso contrario, probamos con a(n-1)+2, a(n-1)+3,…hasta que lleguemos a un número que produzca un conjunto de sumas todas distintas.

Si deseas practicar con ese botón, puedes descargarte la hoja alojada en esta dirección

http://www.hojamat.es/sindecimales/aritmetica/teoria/apunarit.htm#mian

Si te gusta la programación, sigue esta rutina en VBA, contenida en la hoja enlazada:

Sub nuevo()
Dim sumas, elem, x, x1, i, j, x0, s
Dim vale, dasuma As Boolean

sumas = ActiveWorkbook.Sheets(3).Cells(7, 4).Value ‘Lee los primeros elementos
elem = ActiveWorkbook.Sheets(3).Cells(7, 7).Value
x1 = ActiveWorkbook.Sheets(3).Cells(8 + elem, 7).Value

vale = False
x = x1 + 1
While Not vale ‘Se recorre un bucle mientras no aparezcan sumas distintas
dasuma = False ’Esta variable controla si una suma se repite
i = 1
While i <= elem And Not dasuma ‘Bucle de búsqueda de sumas no repetidas
x0 = ActiveWorkbook.Sheets(3).Cells(8 + i, 7).Value
j = 1
While j <= sumas And Not dasuma
s = ActiveWorkbook.Sheets(3).Cells(8 + j, 4).Value
If x1 + x0 = s Then dasuma = True ‘Una suma se ha repetido, y se rechaza el nuevo elemento
j = j + 1
Wend
i = i + 1
Wend
If dasuma Then
x1 = x1 + 1
Else
vale = True
elem = elem + 1 ‘Se ha encontrado un elemento válido y se incorpora a la columna
ActiveWorkbook.Sheets(3).Cells(8 + elem, 7).Value = x1
For j = 1 To elem ‘Se incorporan las sumas nuevas
x0 = ActiveWorkbook.Sheets(3).Cells(8 + j, 7).Value
ActiveWorkbook.Sheets(3).Cells(8 + sumas + j, 4).Value = x1 + x0
Next j
End If
Wend
End Sub

Hemos aprovechado la estructura de la hoja de cálculo para no tener que definir matrices o vectores de datos.

Curiosidades sobre esta sucesión

En la hoja arriba enlazada hemos copiado los primeros términos de la sucesión en la hoja “Propiedades”. Como en OEIS sólo figuran 50 elementos y algunas curiosidades implican muchos términos, hemos adaptado el algoritmo anterior para convertirlo en una función MIAN(N), tal que dado el número de términos, devuelva una cadena de caracteres (string) con los primeros términos de la sucesión de Mian-Chowla. Después, con la técnica de “Texto en columna” se pueden organizar en fila o columna. Hay que advertir que según el número de términos, la función puede ser lenta. Al ser este algoritmo muy parecido, remitimos al código VBA de la hoja enlazada.



Con esta lista de la hoja “Propiedades” podemos comprobar algunas de las afirmaciones que se han hecho sobre esta sucesión. Por ejemplo:

El límite de la suma de los inversos de esta sucesión está entre 2.158435 y 2.158677

Creamos una columna paralela a la lista que contenga los inversos, y al lado otra que recoja la sumas parciales. Con los términos que hemos identificado, la lista termina así:



Como vemos, se queda a una milésima aproximada de lo conjeturado, pero con hoja de cálculo no se puede afinar más sin un enorme gasto de tiempo.

La suma de los cuadrados de los inversos converge a 1.33853369 

Con un par de columnas, una de cuadrados de inversos, y otra de sumas parciales, llegaremos a

Es más aproximado que el anterior, porque los sumando son más pequeños.

Los valores de la sucesión, a partir de n=4, están comprendidos entre n^2/2 y n^3/3

Aquí tienes el cálculo para los términos 401, 475 y 565:


Ajuste

Se han dado otros varios ajustes de esta sucesión, pero no ha sido posible comprobarlos con la hoja. Así que, como una práctica, ajustaremos mediante una función potencial:


No está mal, un R2=0,9975, que nos aproximaría a una potencial de exponente 2,5 aproximadamente, pero es un cálculo no muy exacto.