miércoles, 28 de junio de 2023

En el punto medio de dispares

 ¿Qué números son promedio entre su cuadrado más cercano y el triangular también más cercano? Es una pregunta a la que no es difícil responder con las herramientas que tenemos a nuestra disposición, pero que requiere un cierto cuidado a la hora de plantear un algoritmo. Veremos más adelante las dificultades que se pueden presentar. Toda la entrada se referirá a la posible estructura de ese algoritmo y sus problemas. No abordaremos apenas estudios teóricos.

En primer lugar estudiaremos técnicas que nos sirvan para todos los casos, sean cuadrado con triangular, cubo con cuadrado o primo con oblongo, para después descender a detalles en cada tipo de número. Para estas búsquedas llevamos tiempo usando las funciones ESCUAD, ESTRIANGULAR, ESOBLONGO, ESCUBO y otras similares. Puedes encontrarlas todas usando Buscar en el blog.

Estas son algunas de ellas:

Public Function escuad(n) As Boolean
If n < 0 Then
escuad = False
Else
If n = Int(Sqr(n)) ^ 2 Then escuad = True Else escuad = False
End If
End function


Public function estriangular(n) as boolean
dim a

a = Int(sqr(8*n+1))
if a*a=8*n+1 then estriangular = true else estriangular = false
end function

Function escubo(n)
Dim a

a = Int(n ^ (1 / 3) + 10 ^ (-6))
If a * a * a = n Then escubo = True Else escubo = False
End Function

Con cualquiera de ellas se pueden construir las funciones PROXIMO y ANTERIOR, en las que un parámetro tipo decidirá si se busca un cubo o un oblongo, o preferentemente, cambiando una línea de código para sustituir la búsqueda de un tipo por la de otro. Lo explicamos con un ejemplo:

La siguiente versión de PROXIMO busca el cuadrado más cercano entre los mayores que un número

Function proximo(a) As Long
Dim p, prim As Long
Dim sale As Boolean

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

Por ejemplo, te dará que PROXIMO(78)=81

Si sustituimos ESCUAD por otra función, nos servirá el mismo código para buscar triangulares, cubos o pentagonales. En general, se dará por supuesto que cambiaremos esa línea de código para pasar de un tipo a otro.

De igual forma se puede construir la función ANTERIOR:

Function anterior(a) As Long
Dim p, prim As Long
Dim sale As Boolean

p = a -1: sale = False: prim = 0
While Not sale and p>0
If escuad(p) Then prim = p: sale = True
p = p - 1
Wend
anterior = prim
End Function

Por ejemplo, en este caso para cuadrados te dará ANTERIOR(15)=9

Caso de cuadrados y triangulares

Candidatos a ser los más próximos

 La primera idea que se nos ocurre es la de buscar el cuadrado más próximo por la izquierda y también por la derecha, y quedarnos con el más próximo. No hay posibilidad de “empate”, porque serían dos cuadrados consecutivos, n2 y (n+1)2, y entre ellos siempre existe una diferencia impar, 2n+1, por lo que no existirá un número en el punto medio. El cuadrado más cercano siempre será único.

Por contra, entre dos triangulares consecutivos si existe esa posibilidad de empate. Por ejemplo, 32 está comprendido entre los triangulares 28 y 36, y a 4 unidades de cada uno de ellos, por lo que el título de “más cercano” sirve para cualquiera de ellos. Vemos cuándo ocurre esto:

Sean dos triangulares consecutivos n(n-1)/2 y n(n+1)/2. Su diferencia será n, luego si este valor es par, tendremos dos triangulares cercanos a un número a la misma distancia. Entre 1 y 3, el punto medio es 2, su promedio. Entre 6 y 10, el 8, entre 15 y 21, el 18, y así con todos los ejemplos similares. La consecuencia es que para triangular más cercano a un número dado tendremos dos candidatos. Por cierto, ese número central es fácil ver que será el doble de un cuadrado, 2, 8, 18, 32,...

Ese empate entre triangulares cercanos habrá que tenerlo en cuenta en el algoritmo. Su núcleo podrá ser el siguiente:

for i=2 to 1000
c=0 ‘Esta variable controlará el posible empate entre triangulares
a=anteriorcuad(i) 'Cuadrado menor
b=proximotriang(i) 'Triangular mayor
m=anteriortriang(i) 'Triangular menor
n=proximocuad(i) 'Cuadrado mayor
if i-a>n-i then a=n 'Se queda "a" como cuadrado más cercano tomando el valor de n
if b-i>i-m then b=m 'El triangular "b" es el más cercano, quizás con el valor de m
if b-i=i-m then ‘Hay empate
If escuad(2 * i - m) Then a = 2 * i - m: b = m: c = 1
If escuad(2 * i - b) Then a = 2 * i - b: c = 1 ' El valor c=1 indica que se ha resuelto el empate
end ifif i=(a+b)/2 or c=1 then ‘Se han encontrado los más próximos o empate resuelto
escribe(i, a, b)
next i


Alguna parte de este planteamiento se ha escrito en pseudocódigo para mayor claridad (anteriorcuad, proximocuad,...). Hemos incorporado estas líneas a un buscador con el siguiente resultado:

2, 5, 23, 32, 47, 52, 65, 86, 140, 161, 170, 193, 203, 228, 266, 312, 356, 389, 403, 438, 453, 490, 545, 610, 671, 716, 735, 782, 802, 851,...

Estos son los primeros números naturales que se encuentran en el punto medio entre el cuadrado y el triangular más cercano. En forma de tabla, podemos añadir en una segunda columna el cuadrado y el triangular más cercanos, de los que es promedio el número. No tienen que aparecer en este orden:

Están publicados en https://oeis.org/A233074

Alternativa para este caso

En este caso de cuadrados y triangulares no son necesarias las funciones POSTERIOR y ANTERIOR. Para los cuadrados bastará con elegir, para un número N los siguientes, expresados con lenguaje de Excel o Calc:

A=(ENTERO(RAIZ(N)))^2   como anterior y  B=(1+ENTERO(RAIZ(N)))^2 como posterior

Para los triangulares es un poco más complicado. Las siguientes expresiones son el resultado de resolver la ecuación x(x+1)/2=N.

X=ENTERO((-1+RAIZ(8*N+1))/2), que es el “falso orden” triangular de N

A=X(X+1)/2 como anterior y B=(X+1)(X+2) como posterior.

 Con estas fórmulas se puede construir un esquema de hoja de cálculo que nos indique, con un solo golpe de vista, qué cuadrados o triangulares son los más cercanos, así como si existe empate o no. En la imagen siguiente se ha analizado el número 456 con las fórmulas explicadas, resultando 441 y 465 como los candidatos. Como sus diferencias, 15 y 9, no son iguales, 456 no cumpliría lo exigido.

 


 

 Caso de cuadrados y cubos

 En este caso podemos usar el procedimiento general, basado en PROXIMO y ANTERIOR, pero usando ESCUBO en lugar de ESTRIANGULAR.

Vimos que en los cuadrados no existía posibilidad de empate en las distancias por la izquierda o derecha del número. Igual ocurrirá con los cubos, porque uno será par y otro impar.

Aplicamos, pues, el procedimiento general sin tener en cuenta los empates:

 


También estos están ya publicados:

 A233075              Numbers that are midway between the nearest square and the nearest cube.           

6, 26, 123, 206, 352, 498, 1012, 1350, 1746, 2203, 2724, 3428, 4977, 5804, 6874, 8050, 9335, 10732, 12244, 13874, 17500, 19782, 21928, 24519, 26948, 29860, 32946, 35829, 39254, 42862, 50639, 54814, 59184, 63752, 69045, 74036, 79234, 85224, 90863, 97340,

Alternativa para este caso

 Vimos que PROXIMO y ANTERIOR se podían sustituir, en el caso de los cuadrados, por A=(ENTERO(RAIZ(N)))^2   como anterior y  B=(1+ENTERO(RAIZ(N)))^2 como posterior.

Los cubos admiten un planteamiento similar

A=(ENTERO(N^(1/3)))^3


B=(1+ENTERO(N^(1/3)))^3

En la imagen observamos con el número 280 que no hay posibilidad de empate.


Promedios entre primos y cuadrados

 Aquí sí existe la posibilidad de empate entre primos, por lo que habrá que aplicar el algoritmo general presentado más arriba. Los cuadrados han de ser impares, para que las diferencias cuadrado-primo sean pares y admitan un punto medio.

Como vemos en la tabla resultante, la abundancia de soluciones les resta interés:

 

observan diferencias de valor 2, 4, 6, 8,…siendo bastante frecuentes las primeras, en las que el número primo es del tipo n2+2 o n2-2. Se podría hacer un estudio para estos primeros valores, pero queda para otra ocasión.


Esta entrada da fin al curso 2022-23. En septiembre, si el ánimo acompaña, iniciaremos uno nuevo.

 

 

lunes, 19 de junio de 2023

Sumas con anagramáticos

En esta entrada jugaremos un poco con números que comparten cifras y están relacionados mediante algunas operaciones entre ellos.

Sumandos anagramáticos

Comenzamos con aquellos números que son el total de una suma de dos números anagramáticos con ellos, es decir, los tres datos han de compartir cifras y con la misma frecuencia. Aunque están publicados casos similares, aquí exigiremos que los dos sumandos anagramáticos tengan el mismo número de cifras, como en

954=459+495

5238=2385+2853

No tendremos en cuenta ningún sumando que comience por cero.

Para encontrarlos diseñaremos una función de VBasic para Excel y Calc. En ella se usará la función cifras_identicas, cuyo código puedes encontrar en

https://hojaynumeros.blogspot.com/2020/11/consecutivos-con-las-mismas-cifras.html

También usamos nuestra función numcifras

(ver https://hojaynumeros.blogspot.com/2018/04/cancelaciones-anomalas-12.html)

Function dobleanagram$(n)

Dim a, m

Dim s$

s$ = "" ‘Contenedor de sumandos

m = numcifras(n) ‘Cuenta las cifras

For a = 10 ^ (m - 1) To n / 2 ‘Busca con el mismo número de cifras

If cifras_identicas(a, n) And cifras_identicas(n - a, n) Then s = s + " # " + Str$(a) + "+" + Str$(n - a) ‘Solución

Next a

dobleanagram = s

End Function

 Con esta función obtenemos los primeros resultados:




Llama la atención, y era algo esperable, que las soluciones se pueden agrupar en familias, como 954, 9045, 9504, 9540, 9954…Es fácil ver que con un simple cambio se reproducen resultados conocidos. El arrastre de cifras en las sumas influirá en que aparezcan más o menos familias.

Todos los resultados de este problema han de ser múltiplos de 9. En efecto, si los dos sumandos poseen las mismas cifras, serán también iguales sus restos módulo 9, con lo que el total tendría como resto su suma, y al tener las mismas cifras, la única posibilidad es que esos restos sean los tres nulos.

Un resultado similar está publicado en https://oeis.org/A121969, pero ahí se admiten números que comiencen por cero. Basta cambiar una línea en la función para obtener estos resultados, pero no merece la pena.

Anagramático más sus cifras

Otro caso relevante es el de un número igual a un anagramático con él sumado con sus cifras. Tiene un cierto parecido con el caso anterior, porque, en realidad, se usan las mismas cifras, pero aquí están como sumandos separados. Es la situación opuesta a la de los autonúmeros, que no admiten ninguna descomposición de este tipo

(ver https://hojaynumeros.blogspot.com/2015/03/autonumeros-1.html)

Existe una forma muy sencilla de resolver este caso, y es restarle al número sus propias cifras, y ver si la diferencia es anagramática con el total. Para las búsquedas necesitaremos otra función nuestra, sumacifras(n,k), que suma las cifras de n elevadas previamente al exponente k. Esta función la puedes encontrar en el enlace del párrafo anterior.

Para este caso y los siguientes usaremos esta otra función:

Function autoanagram$(n, k)

Dim a, m

Dim s$

s = ""

m = numcifras(n)

a = n - sumacifras(n, k) ‘Al número le restamos potencias de sus cifras

If cifras_identicas(n, a) Then s = s + " # " + Str$(a) ‘Otra nueva solución

autoanagram = s

End Function

Si la usamos con el parámetro k igual a 1, obtendremos las primeras soluciones:


 Puedes comprobar cualquiera de la lista:

810=801+8+0+1

1953=1935+1+9+3+5

Aquí también, y por la misma razón, los dos números implicados han de ser múltiplos de 9.

Estos números sí están publicados, con el mismo planteamiento nuestro, en https://oeis.org/A248209

En la página enlazada puedes estudiar los códigos PARI que contiene. El segundo es similar al usado aquí. No hemos acudido a este lenguaje porque la hoja de cálculo suele ser rápida en estos casos. Tampoco hemos exigido que las soluciones sean múltiplos de 9 por la misma razón. No suelen ser búsquedas muy lentas.

Otros casos con potencias

Como sumacifras(n;k) admite potencias, es sencillo ampliar la búsqueda a los casos en los que las cifras estén elevadas al cuadrado, cubo o cualquier otra potencia.

Cifras al cuadrado

Si tomamos k=2 en sumacifras dentro de la función autoanagram, resultarán parejas de anagramáticos que se diferencien en la suma de los cuadrados de sus cifras.

Aquí los sumandos no tienen las mismas cifras, por lo que las soluciones no han de ser múltiplos de 9, pero sí lo tiene que ser la suma de los cuadrados de las cifras, para conseguir un par de anagramáticos. Ejemplos:

271=217+22+12+72, donde la suma de cuadrados es 54, múltiplo de 9.

2450=2405+22+42+02+52, con suma de cuadrados igual a 45.

 

Cifras al cubo

Para k=3 resultan:

Por ejemplo:

1533=1353+13+33+53+33=1353+1+27+125+27=1353+180

 

Otras potencias

K=4


3211=3112+34+14+14+24=3112+99

K=5


14310=13041+15+35+05+45+15=13041+1+243+0+1024+1=13041+1269

Dejamos aquí las potencias de cifras.

 

Anagramáticos con producto de cifras

Podemos plantearnos pares de anagramáticos que se diferencien en el producto de sus cifras. Usaremos nuestra función producifras, que es similar a sumacifras (ver https://hojaynumeros.blogspot.com/2018/09/permutacion-de-cifras-al-sumar-su.html). En este enlace puedes leer unos resultados más exigentes que los propuestos aquí, pues no basta con que los pares sean anagramáticos, sino que han de ser también simétricos. En las búsquedas hay que eliminar los números en los que el producto de las cifras sea cero, pues aparecerían muchos casos triviales. En nuestro caso obtenemos estos pares:


Por ejemplo, 1631=1613+1*6*1*3=1613+18

Aquí también el producto de cifras ha de ser múltiplo de 9, porque el par de anagramáticos comparte el mismo resto módulo 9. Significa que una cifra ha de ser 9, o bien, que figuren 3 o el 6 repetidos o estar presentes ambos. Recorriendo la tabla se comprueba.

 

 

jueves, 8 de junio de 2023

Generación de primos sumando cuadrados y otros (2)

En la anterior entrada generamos sucesiones de primos en la que cada término era el menor primo con diferencia cuadrada respecto al anterior. De forma más breve realizaremos un recorrido con otros casos que tengan otro carácter.

Triangulares

En el caso de cuadrados usábamos la función PRIMSALTO (ver entrada anterior del blog).

Ahora sustituimos en la función PRIMSALTO la función ESCUAD por la función ESTRIANGULAR, y elegimos el 2 como primo de inicio. Con ello encontraremos los primeros primos que posean una diferencia triangular con el anterior, siendo cada uno el mínimo con esa propiedad.

Obtenemos:

Aquí lo interesante es que todas las diferencias, salvo la primera, han de ser pares, por lo que los órdenes de las mismas han de pertenecer a uno de los tipos 4k o 4k-1. Es fácil razonarlo a partir de la expresión n(n+1)/2.

Con este inicio del primo 2, están publicados en

https://oeis.org/A275030

Ocurre con estos primos algo similar a lo que se observaba en el caso de cuadrados, y es que si se alcanza un primo del tipo 6n+5, todos sus consecutivos comparten ese mismo tipo. Lo puedes comprobar en el caso de 97, que hemos elegido al azar:


A partir del 137 todos son del tipo 6n+5. Se puede razonar estudiando seis casos. En primer lugar distinguiremos entre triangulares de orden 4k o de orden 4k-1 (ver párrafos anteriores) y dentro de ellos, que k sea del tipo 3m, 3m+1 o 3m-1. Lo desarrollamos suponiendo que partimos de un primo del tipo 6n+5 y llamamos T al triangular que se suma:

Primer caso T=2k(4k+1)=8k2+2k

6n+5+T=6n+5+8k2+2k

Si k=3m T es múltiplo de 6, luego sigue la forma 6n+5

Si k=3m+1. T=8(3m+1)2+2(3m+1)=72m2+48m+8+6m+2 que da resto  4 módulo 6, luego pasa al tipo 6n+3, que no es primo. No nos vale.

Si k=3m-1  T=8(3m-1)2+2(3m-1)=72m2-48m+8+6m-2 múltiplo de 6, luego respeta el 6n+5

Segundo caso    T=2k(4k-1)=8k2-2k

Si k=3m es T múltiplo de 6 y respeta el 6n+5

Si k=3m+1 8(3m+1)2-2(3m+1)=72m2+48m+8-6m-2, múltiplo de 6 y respeta el tipo 6n+5

Si k=3m-1  8(3m-1)2-2(3m-1)=72m2-48m+8-6m+2 resto 4 y no resulta primo

O no son válidos los triangulares, porque den resto 4 y convertirían 6n+5 en 6n’+9, no primo o bien se suma un múltiplo de 6 y sigue 6n+5.

Queda, pues, comprobado que al llegar a un primo de ese tipo, se conserva ese carácter.

Primos iniciales, sin antecedentes

Procediendo de forma similar al caso de los cuadrados, descubrimos que estos primos no tienen antecedentes:

3, 5, 7, 11, 17, 19, 23, 31, 37, 41, 43, 47, 59, 61, 67, 71, 73, 79, 83, 97, 101, 103, 109, 113, 127, 131, 139, 151, 157, 163, 167, 179, 181, 191, 193, 197, 199, 211, 223, 229, 241, 251, 263, 269, 271

No debemos confundirnos. En el listado parece que 11 es antecedente de 17, pues su diferencia es el triangular 6, pero la existencia del intermedio 13 invalida la idea.

Primos consecutivos

También en el caso de saltos triangulares se observan primos consecutivos. Estos son los primeros:

23, 29

31, 37

47, 53

53, 59

61, 67

73, 79

83, 89

131, 137

139, 149

151, 157

157, 163

167, 173

173, 179

181, 191

Con cubos

Procediendo de igual forma que en los tipos anteriores obtenemos:

Están publicados en https://oeis.org/A076201, y no presentan, aparentemente, propiedades de interés.

Con oblongos

Al ser los oblongos números pares que son doble de un triangular (son del tipo n(n+1)), se merecen un repaso. Con ellos no se puede iniciar con el primo 2. Estos son los primeros conseguidos con inicio 3:

 


Con oblongos, el tipo de primo que perdura es el 6n+1. En la tabla comprobamos que este hecho comienza en el 7.

Si llamo O al oblongo (da igual su orden, porque siempre es par) tendremos:

6n+1+O = 6n+1+k(k+1)

Si k=3m, 6n+1+(3m)(3m+1) sigue el tipo 6n+1 pues el producto es múltiplo de 6

Si k=3m+1. 6n+1+k(k+1)=6n+1+(3m+1)(3m+2) sería no válido, por ser la suma múltiplo de 3

Si k=3m-1, 6n+1+k(k+1)=6n+1+(3m-1)(3m) sería idéntico al primer caso.

Así que los saltos válidos respetan el tipo 6n+1

Siguiendo un proceder de este blog, cuando se tratan varios tipos de números, al avanzar se prescinde de algunos detalles, para no cansar y también para dar oportunidad a los lectores que deseen explorar por su cuenta. Así que aquí dejamos el tema.