lunes, 10 de diciembre de 2018

Simulaciones - Experimento de Bernouilli


Todos tenemos la experiencia de encuestas de opinión que no aciertan, o pronósticos de lluvia que no se cumplen. Solemos exigir a la Teoría de la Probabilidad y a la Estadística resultados que no nos pueden dar. Con esta simulación intentaremos comprobar las propiedades ya sabidas de los experimentos aleatorios:


  • Repetido un experimento aleatorio en las mismas condiciones, no tiene que dar los mismos resultados.
  • Los resultados son imprevisibles.
  • En general (no siempre), cada experimento suele ser independiente de los anteriores y no se ve influido por ellos.
  • A pesar de lo afirmado, en largas series de repeticiones de un experimento aleatorio se observan unas ciertas regularidades.


Usaremos la hoja de cálculo Simulador, programada en LibreOffice Calc y Excel, que para la simulación que se propondrá funcionará perfectamente.

Está alojada en

Versión Excel:
http://www.hojamat.es/estadistica/tema1/open/simulador.xslm

Versión LibreOffice:

http://www.hojamat.es/estadistica/tema1/open/simulador.ods

La puedes descargar para tu uso.

Para entender algo mejor la relación entre probabilidad y frecuencia simularemos una distribución de Bernouilli, que es la más sencilla de todas. Consiste en imaginar un suceso, por ejemplo tirar un dado y que resulte un 6, y construir una variable cuyo valor sea 1 si ocurre ese suceso y 0 si no ocurre. Así, el 1 tendrá probabilidad 1/6 de salir y el 0, suceso contrario, 5/6, es decir, mucho más probable. Suponemos que en una serie de intentos, el resultado de cada uno no se ve influido por los anteriores.

Primera simulación

Imagina que disponemos de una bola roja y dos blancas en una bolsa, y que extraemos varias veces una bola, la identificamos y la devolvemos a su sitio. Esperaremos que por cada vez que salga una roja aparecerán dos blancas, es decir, intuitivamente asignamos a la roja (que representaremos por el 1) una probabilidad de 1/3 y a las blancas una de 2/3. Si repetimos el experimento muchas veces tendremos la expectativa de que la frecuencia de las blancas será el doble que la de la roja. Observa estas tiradas que hemos conseguido con el simulador:


En ella han aparecido 39 ceros y 21 unos. Como contiene 60 tiradas, habríamos esperado 20 unos (rojas) y 40 ceros (blancas). Existe, pues una diferencia de una unidad, o expresado en porcentaje del  1,67%.

La primera idea que debes tener respecto a la relación entre probabilidad (tu expectativa previa) y la frecuencia observada después de un experimento es que presentan valores bastante aproximados, pero no exactos, salvo casualidades.

Si no se tiene en cuenta esto, dejaremos de creer en los sondeos de opinión o los pronósticos meteorológicos, porque creeremos que se equivocan. Se debe pensar siempre que estos experimentos miden nuestras expectativas, y no la realidad. ¿Se puede intentar disminuir la diferencia entre frecuencia y probabilidad? Pues sí y no. Seguimos hablando de expectativas: si aumentas el número de experimentos esperarás que el error en porcentaje disminuya, pero tampoco esto te da seguridad. Siempre medimos la esperanza y no la certeza. Inténtalo tú:

Abre el simulador y trabaja en su primera hoja Simulación. Sigue estos pasos:
Como tipo de simulación elige Bernouilli con el desplegable:


Como parámetro A, situado en el bloque Otros parámetros, y que contendrá la probabilidad, escribe esto: =1/3, y te dará un valor de 0,3333:



En el ejemplo hemos simulado 60 repeticiones del experimento. Puedes aumentar a 30 filas por 9 columnas (o bien otro valores) para que nos resulten 270 intentos



Señala como mínimo el 0 y como máximo el 1:



Para terminar, en la parte baja del cuadro concreta como criterio Máximo-Mínimo, y, más abajo, número de intervalos igual a 2. Capturamos el cuadro completo:



Observa que hemos dejado la Media y la Sigma de una simulación anterior, porque no van a intervenir. Con esto tienes definido un nuevo experimento con más repeticiones. Según el carácter de los fenómenos aleatorios, esperaremos un error menor, pero eso nunca es seguro.

Pulsa el botón Simulador.




Te aparecerán muchos unos y ceros. A nosotros nos resultó esto:



No vas a contar todos esos ceros y unos. Pasa a la siguiente hoja, Estadísticos, y lee las frecuencias:



En nuestro caso, en lugar de 180 y 90, que sería lo esperado, hemos obtenido 184 y 86, con un error de 4 unidades, 4,44% de error. Luego el error ha aumentado. No te puedes fiar de los fenómenos aleatorios.

Es muy probable que tú hayas obtenido mejor resultado. Lo hemos repetido y los errores obtenidos han sido 10, 1, 2, 5,  0, 8, 7, 6,…Como ves, muy variables y con poca fiabilidad. Es posible que tú también hayas obtenido resultados bastante dispares.

Si deseas introducirte en la Estadística debes aceptar este hecho. Sólo son seguros los resultados posteriores a un experimento, y no nuestras expectativas previas.

Seguimos insistiendo. Ese error hay que reducirlo. Para ello aumentaremos aún más el número de experimentos. Busca la casilla de Repeticiones de la simulación y marca 20 repeticiones, lo que equivale a 5400 experimentos.

Pulsa de nuevo en el botón Simulador y verás oscilar los datos 20 veces. Pasa a la hoja Estadísticos. Lee las frecuencias. A nosotros nos han resultado 1738 bolas rojas y 3662 blancas, en lugar de las esperadas 1800 y 3600, con un error de 62 bolas, que representa un 1,1% de error. Es una mejora, pero no espectacular.

Como regla empírica se suele tomar un 3% de error esperado en 1000 experimentos (esto tiene fundamentación teórica).

Si comparas los valores obtenidos en los estadísticos de la simulación en comparación con los teóricos, la impresión de buen ajuste mejora:



También parece que una columna es el doble de alta que la otra en el gráfico:



Hemos aprendido que cuando se realiza un experimento aleatorio el error que hay que medir es el relativo, el porcentaje, que calculas dividiendo el error absoluto (aquí 62 bolas) entre el total de experimentos (540) y pasarlo, si se desea, a porcentaje.

Hemos repetido el experimento de los 5400 intentos y nos han aparecido estos errores:
0,02%, 0,07%, 1,02%, 0,46%

En conjunto es más fiable que el primer experimento.

Si deseas simular experimentos en los que confíes que se dé una proximidad entre probabilidad y frecuencia, deberás aumentar el número de experimentos (con el consiguiente gasto. Por ello son populares los sondeos con 1000, 5000 o 10000 encuestados, pero no más).

En este ejemplo de Bernouilli conocemos la probabilidad, pero en un sondeo o una previsión meteorológica no lo sabemos y tendremos que manejarnos con cotas de error (ya lo irás viendo)

Por curiosidad, hemos aumentado el número de repeticiones a 200 (tarda un poco), es decir, 54000 experimentos, consiguiendo un error de 0,2%.

Si deseas afinar más tus resultados deberás aumentar el número de repeticiones, con el consiguiente gasto en tiempo y dinero.

NOTA: En estas simulaciones estamos juzgando la exactitud de la función ALEATORIO de las hojas de cálculo. Si esta no está bien programada sufriremos errores sistemáticos, pero como nuestro objetivo es aclarar conceptos, no parece muy grave.

Segunda simulación

Cuando se interviene en procesos aleatorios en la vida real llaman mucho la atención las rachas: tener cuatro varones seguidos, sacar un seis en el parchís tres veces o que veas en la calle varios coches aparcados de la misma marca.

Simularemos experimentos de Bernouillli para descubrirlas. Como todo esto es aleatorio, nunca sabremos si aparecerán o no.

Tener cuatro varones seguidos

Ya sabes cómo se programa el simulador: como parámetro A escribiremos =1/2, que es la probabilidad aproximada de nacer varón. Luego concretaremos una sola columna para leer mejor y, por ejemplo, 200 filas. ¿Has obtenido una racha de cuatro unos (también valdría de ceros, pues tienen la misma posibilidad)?

En nuestro intento ha aparecido una racha de cuatro unos y otra de cinco muy cercana a la anterior:



Esto significa que no es un suceso tan raro. Aparecieron en 200 intentos más rachas de cuatro elementos (ceros o unos) e incluso una racha de ocho unos.

Otra forma de verlo es contar con cuatro columnas y ver si en alguna aparecen cuatro unos (con esto anticipamos la distribución binomial, que estudiaremos en su momento):



En el primer intento hemos conseguido 17 filas en las que aparecen cuatro varones. En la imagen tienes dos casos seguidos:



El último 1 de la fila resulta porque hemos añadido la función producto para contar mejor los 17 casos.

Podemos considerar que la probabilidad de que aparezcan cuatro varones es 0,54=0,0625, que multiplicado por 200 nos da el valor teórico, 12,5, por lo que nuestra simulación, con 17, no era demasiado acertada.

Tercera simulación

Recordarás la Ley de Murphy en sus distintas variantes: “Si algo puede salir mal, probablemente saldrá mal”. En efecto, a veces falla todo lo que era susceptible de fallo. Por eso, en instalaciones en las que la seguridad es prioritaria se suelen duplicar o triplicar los equipos. Imagina que en un quirófano existen tres alimentadores de energía, cada uno con una fiabilidad del 90%. ¿Podrán fallar todos a la vez?

Simularemos Bernouilli con parámetro A igual a 0,1 (probabilidad de fallo) y planificaremos tres columnas, que representarán a los tres equipos, y 1000 filas. ¿Aparecerá un fallo triple? Lo sabremos si aparece una fila con tres unos. Lo hemos intentado y logrado al primer intento:


Los que entendéis la probabilidad habréis comprendido que se  espera un fallo cada mil intentos, porque 0,1*0,1*0,1=0,001

Podéis plantearos otras simulaciones de sucesos cuya probabilidad podáis estimar y comprobar después si la simulación se acerca a las expectativas previas.

viernes, 7 de diciembre de 2018

Suma de cuadrados de cifras (3) Suma de cuadrados que es cuadrada

Esta entrada pertenece a la serie sobre la suma de los cuadrados de las cifras de un número, de las que ya se han publicado dos:


y


Con la suma de los cuadrados de las cifras podemos construir otro cuadrado, ya bien sea con las cifras solas o sumándolas al número total. También si sumamos las cifras sin elevar al cuadrado o si acumulamos también el número original. Busquemos, pues, cuadrados.

Suma de cuadrados de cifras que es cuadrada

Esta cuestión tiene algo de trivial, pero nos permitirá repasar algunos conocimientos. Es fácil ver que la posibilidad de que la suma de los cuadrados de las cifras sea cuadrada depende de su número

Una cifra

Todos los números de una sola cifra cumplirán lo exigido. Teniendo en cuenta el cero tendríamos 10 soluciones.

Dos cifras

Para que la suma de cuadrados de cifras sea cuadrada, una de ellas ha de valer cero, o las dos han de pertenecer a una terna pitagórica, pero solo existen dos casos: {3, 4} y {6, 8}. En el primer caso tendremos 9 posibilidades: 10, 20, 30,…90, y en el segundo 4: 34, 43, 68 y 86.
Así que de dos cifras sólo obtendremos 13 resultados.

Hemos efectuado una búsqueda con la función MASSUMACIF (ver anterior entrada sobre este tema en ENLACE) y el listado confirma estos cálculos, como era de esperar:

N                           SUMA CUAD. CIF.
1                           1
2                           4
3                           9
4                           16
5                           25
6                           36
7                           49
8                           64
9                           81
10                         1
20                         4
30                         9
34                         25
40                         16
43                         25
50                         25
60                         36
68                         100
70                         49
80                         64
86                         100
90                         81

Tres cifras

Este caso es más interesante, pues permite repasar las ternas pitagóricas  en tres dimensiones. Con una cifra cada una resultan ser estas:

{1, 2, 2}, {1, 4, 8}, {2, 3, 6}, {2, 4, 4}, {2, 6, 9}, {3, 6, 6}, {4, 4, 7}, {4, 8, 8}, {6, 6, 7}

Puedes comprobar mentalmente que la suma de cuadrados de cada una es otro cuadrado.

Uso de Cartesius

Con nuestra herramienta para producir productos cartesianos condicionados, Cartesius, alojada en


podemos ver las combinaciones de tres cifras que producen un cuadrado con sus cuadrados sin olvidar ninguna.

El planteo sería:

xtotal=3
xt=1..9
xt=suc(n^2)
suma:cuadrado
creciente

Es fácil de interpretar: se combinan tres conjuntos de cifras del 1 al 9, se elevan al cuadrado y se exige que la suma sea cuadrada. Para abreviar, solo se presentarán las soluciones en orden creciente.

El resultado es:

1             2             2             9
1             4             8            81
2             3             6            49
2             4             4            36
2             6             9           121
3             6             6             81
4             4             7             81
4             8             8           144
6             6             7           121

Con esta tabla los podemos contar sumando variaciones: 3+6+6+3+6+3+3+3+3=36, y saldrán sólo los que no contienen la cifra 0.

Esto nos da el siguiente recuento para tres cifras:

(1) Números cuyas cifras pertenecen a estas ternas
Habrá que contar los distintos órdenes de cada una: 3+6+6+3+6+3+3+3+3=36

(2) Provenientes de los casos de dos cifras pitagóricas intercalando un cero, como en 304 o 430. Resultarían 4*2=8 casos.

(3) Los terminados en dos ceros, que serían 9 más.
En total obtendríamos 36+8+9=53

En este listado tienes la comprobación, pues resultan 53:

100, 122, 148, 184, 200, 212, 221, 236, 244, 263, 269, 296, 300, 304, 326, 340, 362, 366, 400, 403, 418, 424, 430, 442, 447, 474, 481, 488, 500, 600, 608, 623, 629, 632, 636, 663, 667, 676, 680, 692, 700, 744, 766, 800, 806, 814, 841, 848, 860, 884, 900, 926, 962

Si pasamos a cuatro cifras, cambiando xtotal a cuatro, resultan 26 combinaciones distintas salvo el orden y 203 con él.



Destacan las soluciones formadas por cuatro cifras iguales, que pertenecen al conjunto porque la suma equivale a multiplicar por 4, lo que las convierte en un nuevo cuadrado.

Todos estos casos se pueden unificar con el uso de la función sumacifras(n;k) que estudiamos en la primera entrada de esta serie ENLACE. Basta exigir que esa suma de cifras, para k=2, sea cuadrada.

Aquí tienes un listado de los números que cumplen la propiedad desde 100 hasta 300. Junto a ellos figura la suma de cuadrados de sus cifras:



Se puede comprobar que las tres cifras de cada elemento constituyen una terna pitagórica, como se vio más arriba.

El listado completo lo tienes en http://oeis.org/A175396

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 34, 40, 43, 50, 60, 68, 70, 80, 86, 90, 100, 122, 148, 184, 200, 212, 221, 236, 244, 263, 269, 296, 300, 304, 326, 340, 362, 366, 400, 403, 418, 424, 430, 442, 447, 474, 481, 488, 500, 600, 608, 623, 629, 632, 636, 663,…


jueves, 29 de noviembre de 2018

Suma de cuadrados de cifras (2) Un cuadrado menos los de sus cifras

Podíamos sustituir en la propiedad estudiada en la entrada anterior (pulsa sobre Entrada antigua en la parte baja de este texto)  la suma por la diferencia, es decir, que en lugar de sumar al cuadrado de un número los de sus cifras, se restaran estas para lograr un resultado dado.

Un ejemplo: 2675=522-52-22

Es fácil obtener un listado de los primeros números que presentan esta propiedad. Basta recorrer los números naturales y restar a cada uno los cuadrados de sus cifras. Estos son los primeros resultados no nulos (lo serían los provenientes de números de una cifra):

99, 119, 139, 159, 179, 199, 219, 239, 259, 279, 396, 436, 476, 516, 556, 596, 636, 676, 716, 756, 891, 951, 1011, 1071, 1131, 1191, 1251, 1311, 1371, 1431, 1584, 1664, 1744,…

Todos cumplen ser equivalentes a un cuadrado menos los cuadrados de sus cifras. Por ejemplo, el último, 1744, cumple: 1744=422-42-22

Llama la atención el hecho de que la última cifra se mantenga en cada periodo de diez términos, pero es lógico, ya que al ir cambiando las unidades de un número, las de su cuadrado se compensan con el cuadrado de esas unidades.

Supongamos la siguiente distribución de cifras en base de numeración 10:

N=abcd…p y N+1=abcd…(p+1)

Tendrían todas su cifras iguales menos la última, es decir

N=10k+p, N+1=10k+p+1

Si aplicamos a ambos números la resta de los cuadrados de sus cifras, los primeros sumados serán idénticos, cambiando tan solo p con p+1. Llamemos A y B a esas diferencias:

A=N2-sumacuad(abcd..)-p2

B=(N+1)2-sumacuad(abcd…)-(p+1)2

Resto: B-A=(N+1)2-N2+p2-(p+1)2=100k2+(p+1)2+20k(p+1)-100k2-p2-20kp+p2-(p+1)2=20k

Esto demuestra que dos números consecutivos restados con los cuadrados de sus cifras forman una progresión aritmética si todas las cifras son idénticas salvo la última. Como esta puede tomar valores entre 0 y 9, cada progresión tendrá 10 términos. Además, hemos demostrado que la diferencia entre ambos es 20k, siendo k el número formado por las primeras cifras iguales.

C-p+1)2+p2=(p+1)2-p2+20k-(p+1)2+p2=20k

Si dos números consecutivos coinciden en sus primeras cifras, que forman un múltiplo de 10, 10k, la diferencia en la sucesión es 20k

Tomemos, por ejemplo, 124 y 125

1242-12-22-42=15355
1252-12-22-52=15595

La diferencia 15595-15355=240, que coincide con 20*12, en el que 12 es el número formado por las primeras cifras de 124 y 125.

Función menossumacifras

Para determinar si un número posee esta propiedad, bastará modificar la función MASSUMACIF  (ver entrada anterior) por otra MENOSSUMACIF que reste los cuadrados de las cifras en lugar de sumarlas. El problema radica en el rango de búsqueda. Si en la anterior se buscaba entre 1 y la raíz cuadrada del número, ahora se efectuará entre esa raíz y otra que garantice que se puedan restar los cuadrados de las cifras. Para ello añadimos al número dado tantas potencias de la cifra 9 como cifras tenga más uno. Quedaría así:

Function menossumacif(n, k)
Dim i, r, t, ms

ms = 0
r = Int(n ^ (1 / k))
t = numcifras(n) + 1 ‘Se toma el número de cifras más 1
t = t * 9 ^ k ‘Se cuentan potencias de 9
t = (n + t) ^ (1 / k) ‘Tope de búsqueda
i = r ‘Inicio de búsqueda
While i <= t And ms = 0
If i ^ k - sumacifras(i, k) = n Then ms = i
i = i + 1
Wend
menossumacif = ms
End Function

Si aplicamos esta función a uno de los términos de la sucesión obtenida deberá obtenerse la solución y un cero para los números que no pertenecen a la misma.

MENOSSUMACIF(11799;2)=109, y se cumple que 1092-12-02-92=11799

MENOSSUMACIF(11801)=0, porque no tiene esa propiedad.

Uso de PARI

Este es el listado obtenido con el lenguaje PARI. El código usado es similar al de la entrada anterior con el código

list(a)=my(v=List(), t); for(p=1, a, t=p^2-norml2(digits(p));listput(v, t)); vecsort(Vec(v));
print(list(100))


0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 119, 139, 159, 179, 199, 219, 239, 259, 279, 396, 436, 476, 516, 556, 596, 636, 676, 716, 756, 891, 951, 1011, 1071, 1131, 1191, 1251, 1311, 1371, 1431, 1584, 1664, 1744, 1824, 1904, 1984, 2064, 2144, 2224, 2304, 2475, 2575, 2675, 2775, 2875, 2975, 3075, 3175, 3275, 3375, 3564, 3684, 3804, 3924, 4044, 4164, 4284, 4404, 4524, 4644, 4851, 4991, 5131, 5271, 5411, 5551, 5691, 5831, 5971, 6111, 6336, 6496, 6656, 6816, 6976, 7136, 7296, 7456, 7616, 7776, 8019, 8199, 8379, 8559, 8739, 8919, 9099, 9279, 9459, 9639, 9999

Se puede observar la constancia de la última cifra en ciertos conjuntos de diez elementos.


lunes, 19 de noviembre de 2018

Suma de cuadrados de cifras (1) - Un cuadrado más los de sus cifras

Esta entrada inicia una serie que iremos publicando a lo largo del curso 2018-19 sobre las suma de los  cuadrados de las cifras de un número natural. El tema de las cifras, al depender de la base de numeración, no es el preferido en este blog, pero como sus resultados suelen ser atractivos y muy apreciados por los seguidores, lo tocamos con cierta frecuencia.

La serie desarrollará tres tipos de propiedades o curiosidades

  • Igualdades entre números que implican el cuadrado de las cifras.
  • Propiedades y curiosidades clásicas, ya estudiadas, como los números felices.
  • Iteraciones con recurrencias en las que interviene la suma citada.


Abordamos la primera cuestión:

En el mes de diciembre de 2017, a propósito de la fecha 9/12/17, publiqué en Twitter (Antonio Roldán, @Connumeros) la siguiente curiosidad: 91217 equivale al cuadrado de un número sumado con los cuadrados de sus cifras:

91217=302^2+3^2+0^2+2^2

Como siempre en estas ocasiones, esto me motivó a estudiar mejor la suma de los cuadrados de las cifras de un número, pero, al investigar lo ya publicado, me di cuenta de que esta suma bien merecía lo que en este blog llamo “unas vueltas”, pues son varias las cuestiones interesantes que surgen de la misma. Nos llevará varias  entradas, constituyendo una serie, porque he visto que dicha suma da para muchas cuestiones distintas. Es probable que al final del curso 2018-19 se recojan en una publicación.

Comenzaremos con la propiedad que publiqué en Twitter: ¿qué números son equivalentes al cuadrado de otro, sumado con los cuadrados de sus cifras? Para ello necesitaré una función que calcule esa suma. Ya tengo una en Basic de hoja de cálculo que está diseñada no sólo para los cuadrados, sino para cualquier potencia. La puedes usar en Excel o en LibreOffice Calc, por ejemplo. Es la siguiente:

Public Function sumacifras(n, k)
Dim h, i, s, m

h = n ‘Variable auxiliar
s = 0 ‘Recibirá la suma
While h > 9
i = Int(h / 10)
m = h - i * 10
h = i ‘Estas tres líneas extraen una cifra del número
s = s + m ^ k ‘La potencia se incorpora a la suma
Wend
s = s + h ^ k
sumacifras = s
End Function

Es evidente que en nuestro caso el valor de k siempre será 2, ya que usaremos cuadrados. Puedes eliminar la variable k y sustituirla por 2. Aquí no lo haremos por no perder generalidad en esta función.

En el caso de k=2, la función tiene en el lenguaje PARI una traducción muy simple. Basta pedir

norml2(digits(n))

Listado de números con la propiedad pedida

Una vez tenemos la función que suma los cuadrados de las cifras de n bastará sumar el número con esa suma, es decir

 n+sumacifras(n;2)

Con ello podemos construir un listado:



Por ejemplo, 162=9^2+9^2, 179=13^2+1^2+3^2, 293=16^2+1^2+6^2,…

Salen desordenados, por lo que hay que acudir a http://oeis.org/A209303, página de OEIS en la que se publican ordenados:  2, 8, 18, 32, 50, 72, 98, 101, 123, 128, 149, 162, 179, 213, 251, 293, 339, 389, 404, 443, 446,…Podemos conseguir que se nos presenten ordenados (En Excel basta con el comando de ordenar) con el lenguaje PARI:

list(a)=my(v=List(), t); for(p=1, a, t=p^2+norml2(digits(p));listput(v, t)); vecsort(Vec(v)); 
print(list(20))


Como era de esperar, este listado sólo incluye números no muy grandes. En el caso de 91217 no hubiéramos descubierto la propiedad consultándolo. Necesitamos una función que nos indique de forma directa si un número posee esta propiedad o no, si es la suma de otro número más los cuadrados de sus cifras.

Función MASSUMACIF

Con la base de la función sumacifras podemos recorrer, para un número N, desde 1 hasta la raíz k-ésima de N, todos los números posibles, hasta ver si uno cumple la propiedad:

Function massumacif(n, k)
Dim i, r, ms

ms = 0
r = Int(n ^ (1 / k))
i = 1
While i <= r And ms = 0
If i ^ k + sumacifras(i, k) = n Then ms = i
i = i + 1
Wend
massumacif = ms
End Function

Esta función devolverá un cero si no posee la propiedad, y la base del cuadrado si la cumple.  Con ella volvemos al inicio de la cuestión. Si la aplicamos al 91217, con el segundo parámetro igual a 2 (cuadrados) nos devuelve 302.

massumacif(91217;2)=302

Es muy simple la versión de esta función en el lenguaje PARI. El siguiente código produce el mismo listado, idéntico al que se consiguió ordenando la sucesión primitiva.

for(i=1,1000,ms=0;r=sqrt(i);j=1;while(j<=r&&ms==0,if(j^2+norml2(digits(j))==i,ms=j;print1(i,", "));j+=1))




Tipos de números

No hemos encontrado cuadrados ni números triangulares en esta sucesión, al menos menores que 70000. Sí figuran primos. Los primeros son:
2, 101, 149, 179, 251, 293, 389, 443, 971, 1181, 1259, 1427, 2843, 2957, 3323, 5237, 5387,…

Sólo hemos identificado tres potencias no cuadrados, 2, 32 y 128, que corresponden a potencias de 2 de una sola cifra, 2, 4 y 8.

Como curiosidad última, sí existen capicúas en la sucesión. Los primeros son 101, 404, 909, 10001, 29292, 40004,…

Los que poseen cifra 0 se justifican fácilmente, como 404, que coincide  con 20^2+2^2+0^2. Más difícil es 29292, que sin ordenador hubiera sido difícil obtener que

29292=171^2+1^2+7^2+1^2

Variantes de esta operación

En la suma del cuadrado de un número con la suma de cuadrados de sus cifras podíamos eliminar el que el número se eleve al cuadrado. Simplemente le sumamos el cuadrado de sus cifras. En A258881 tienes publicadas de forma desordenada esas sumas:

0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 11, 13, 17, 23, 31, 41, 53, 67, 83, 101, 24, 26, 30, 36, 44, 54, 66, 80, 96, 114, 39, 41, 45, 51, 59, 69, 81, 95, 111, 129, 56, 58, 62, 68, 76, 86, 98, 112, 128, 146, 75, 77, 81, 87, 95, 105, 117, 131, 147, 165, 96,…

Te invitamos a que uses la función MASSUMACIF, debidamente corregida (basta sustituir  i^2 por i y eliminar la variable r, siendo sustituida por i) para obtener un listado ordenado en Excel:

2
6
11
12
13
17
20
23
24
26
30
31
36

El listado de MASSUMACIF0 puede ser

Function massumacif0(n, k)
Dim i, r, ms

ms = 0
i = 1
While i <= n ‘Se suprime la raíz de n
If i + sumacifras(i, k) = n Then ms = ms + 1 ‘Se acumula la variable ms
i = i + 1
Wend
massumacif0 = ms ‘El resultado es el número de repeticiones
End Function

En PARI podemos efectuar una corrección similar y resultará

for(i=1,100,ms=0;j=1;while(j<=i&&ms==0,if(j+norml2(digits(j))==i,ms=j;print1(i,", "));j+=1))

Su resultado coincide con el de Excel:


Números con soluciones múltiples

En http://oeis.org/A225049 están publicados los números de la anterior sucesión que presentan varias soluciones:

30, 41, 56, 81, 95, 96, 98, 101, 112, 114, 121, 125, 131, 142, 146, 152, 157, 168, 173, 177, 182, 186, 191, 196, 197, 199, 206, 209, 213, 215, 216, 217, 227, 230, 232, 234, 240, 243, 245, 247, 248, 257, 260, 262, 266, 272, 276, 284, 285, 287, 292, 299, 300

Por ejemplo 131 = 57+5^2+7^2 = 73+7^2+3^2 = 105+1^2+5^2 = 122 + 1^2+4^2+4^2.

Con el uso de massumacif0(i), si exigimos que su valor sea mayor que 1, obtenemos el mismo listado:

30
41
56
81
95
96
98
101

jueves, 8 de noviembre de 2018

Simulaciones - Distribución uniforme (2/2)


Otros ejemplos de distribución uniforme

El seis triple

En muchos juegos de mesa, sacar un 6 tres veces seguidas es un acontecimiento importante. Según la teoría, la probabilidad de que esto ocurra es de 1/(6*6*6)=1/216. Podemos esperar que de cada 216 tiradas triples que efectuemos, una de ellas presente 6-6-6. Podíamos simularlo para ver qué ocurre.

Para ello concretamos el Simulador:

 Distribución uniforme entera (es decir, discreta).
 Mínimo 1 y máximo 6
 200 filas y 3 columnas (las filas son opcionales. Podrían ser 216 o el doble)
 Criterio Máximo-mínimo


Así, a simple vista percibiremos bien si resulta un 6 triple.

Nosotros hemos efectuado dos simulaciones sin obtener el seis triple, que sólo ha aparecido en el tercer intento:


¿Por qué, entonces, creemos que es más fácil conseguirlo? Todo el que ha jugado recuerda haber enlazado tres 6 seguidos. Ocurre que recordamos mejor las jugadas favorables, y no las desfavorables, como cuando en el juego de la Oca nos toca la cárcel o la muerte, o las veces que necesitamos un cinco para salir en el parchís y no nos sale en muchas jugadas.

La lotería primitiva

En esta lotería española pueden salir los números del 1 al 49, y los apostadores eligen entre varios tipos de apuestas. Se puede tratar como distribución uniforme porque todos los resultados presentan la misma probabilidad (1/13983816), aunque tenemos que acudir a un muestro sin reemplazamiento, que refleja mejor el proceso. En el sorteo aparecerán seis números y se gana más o menos dinero según las coincidencias entre nuestra apuesta y el resultado del sorteo. Suponemos la apuesta más sencilla, compuesta de seis números.



Nuestro objetivo es el de comprobar la dificultad de acertar varios resultados, que suelen tenerse en cuenta entre tres o seis aciertos, cambiando la cuantía del premio según el número de aciertos.

Abrimos el Simulador.

Le concretamos los siguientes datos:



 Máximo y mínimo, de 1 a 49, que son los números del sorteo
 Distribución Muestreo sin y con enteros
 Seis filas y una columna, para simular bien el sorteo
 Criterios Máximo-Mínimo

Es importante que actives exactamente lo que se ha sugerido. Al pulsar el botón Simulación aparecerán seis números distintos del 1 al 49. Si no lo logras, repasa bien todos los criterios necesarios.

Para hacer ver la dificultad de acertar, hemos adjuntado nuestra apuesta a la izquierda de la simulación:


Ahora se trata de usar reiteradamente el botón de simulación y comprobar cuántos números hemos acertado. Nosotros hemos estado un buen rato jugando a simular y siempre hemos obtenido menos de tres aciertos. Valga esta experiencia para enseñarnos a jugar con prudencia.

Uso de la distribución uniforme para probabilidades dadas por una tabla

Con el Simulador y el uso de la distribución uniforme continua (con decimales) se pueden simular probabilidades dadas por una tabla. Por ejemplo, supongamos que disponemos de tres bolas rojas, dos verdes y dos amarillas para efectuar experimentos aleatorios. Lo normal sería introducirlas en una bolsa e ir sacando una a una con reposición. Esto, en las aulas, podría ser divertido y algo caótico.

Una alternativa es simularlo con ordenador.

Partimos de la tabla de probabilidades

Roja         3/7
Verde      2/7
Amarilla  2/7

En primer lugar, la cambiamos a probabilidades acumuladas, es decir, que cada una sea la actual más todas las anteriores. Así:

Roja         3/7
Verde      5/7
Amarilla  7/7

Esto es para organizar unas desigualdades más adelante.

El proceso es como sigue:

En el simulador organizamos una distribución uniforme con decimales, mínimo 0 y máximo 1 (los 7/7). Como criterio le damos que use el Máximo y mínimo, y fijamos, por ejemplo, 100 filas y una columna. En el parámetro A se ha escrito 3/7 y en el B 5/7 (esto no es obligatorio).

Copiamos la imagen de la hoja:



Si iniciamos la simulación obtendremos una columna con 100 números entre 0 y 1 expresados con decimales:



Estos números (y esto no lo consigue la herramienta) debemos convertirlos en Rojo, Verde y Amarillo. Para eso añadimos una fórmula a la derecha de cada número, de forma que si este no llega a 3/7 (que hemos escrito en la celda E21) , es que se trata de la Roja, y en caso contrario, si tampoco llega a 5/7 (probabilidad acumulada escrita en E22), se trata de la Verde, y si no, es Amarilla.

La primera vez que se organiza esto resulta complicado, pero hay que insistir y buscar otros ejemplos. Esta fórmula, en nuestro caso, es:

=SI(G5<E$21;"Roja";SI(G5<E$22;"Verde";"Amarilla"))

(hemos copiado la de G5)

En ella se ve claramente el mecanismo: Si el número contenido en G5 es menor que el parámetro A (3/7), se trata de Roja. Si no es Verde o Amarilla según quede menor o mayor que el otro parámetro. El resultado lo tienes en la imagen:


Los números que no llegan a 3/7 producen una roja, los siguientes hasta 5/7 la verde y el resto amarilla. Para ver si la simulación es razonable hemos contado los colores, resultando 38 rojas, 23 verdes y 29 amarillas. A la derecha ves la comparación con la teoría: las amarillas han resultado muy aproximadas y las otras con errores de centésimas, luego aceptamos el procedimiento.

Media y desviación típica

En teoría (no en una simulación concreta), si la distribución uniforme es continua entre los extremos a y b, su media es (a+b)/2 y su varianza (b-a)^2/12. Con el simulador podríamos aproximarnos a esos valores. Construimos un ejemplo:

Estimar la media y desviación típica de una distribución uniforme generada entre los extremos 10 y 20

Concretaremos distribución uniforme con decimales, extremos 10 y 20, y para obtener una buena aproximación, usaremos 100 repeticiones del experimento, con una sola columna y 20 filas (todo esto ha sido opcional. Puedes cambiarlo)


En este caso también concretaremos la opción de usar máximo y mínimo y fijaremos los intervalos en 10:

De esta forma generaremos 2000 datos uniformes entre 10 y 20. Su media debería ser (10+20)/2=15 y su varianza (20-10)^2/12=8,33. La desviación típica esperada será la raíz cuadrada de esta cantidad, 2,88.

Iniciamos la simulación y obtenemos:


Ha resultado bastante aproximado: media 14,96 y desviación típica 2,9008. En el gráfico se percibe bastante bien la uniformidad:


Es buena práctica, en cursos elementales de Estadística, construir estas simulaciones, porque ayudan a fijar conceptos.

lunes, 29 de octubre de 2018

Simulaciones - Distribución uniforme (1/2)


Iniciamos hoy una serie, que nos tomaremos con calma, sobre simulaciones elementales de variables aleatorias. Nos basaremos en las prácticas de nuestro curso de Estadística, (http://www.hojamat.es/estadistica/iniestad.htm) adaptándolas al formato de un blog. Usaremos nuestro Simulador implementado para hojas de cálculo, el cual puede sufrir cambios a lo largo de la serie, por lo que se aconseja su recarga en caso de duda.

Comenzaremos con la distribución uniforme. Si no tienes claro el concepto puedes acudir a la Teoría correspondiente

(http://www.hojamat.es/estadistica/tema6/teoria/teoria6.pdf).

Por ahora te basta con la idea de que representa experimentos aleatorios en los que todos los elementos presentan una misma probabilidad de ocurrir, como tiradas de dados o las loterías. Se suele distinguir entre distribución uniforme discreta, cuando sólo existe un número finito de posibilidades (dados o monedas), o continua, cuando pueden aparecer infinitos sucesos, o al menos, tantos, que sea preferible tratarlos como infinitos.


Distribución uniforme discreta

En ella se trabaja sobre un conjunto finito de n elementos con la hipótesis de que todos ellos poseen la misma probabilidad de aparecer, que será, por tanto, 1/n. Un ejemplo es el de una tirada de dados. La distribución uniforme más útil es aquella en la que el conjunto está formado por los números comprendidos entre a y b ambos inclusive. En los dados a=1 y b=6
.
Puedes consultar en cualquier manual los valores de los principales estadísticos de esta distribución.

Media:

Varianza:


En el caso de las tiradas de dados m=3,5 y var=35/12=2,92 y su desviación típica 1,7321.

Podemos comprobar estos valores mediante nuestro simulador, alojado en estas direcciones:

http://www.hojamat.es/estadistica/tema1/open/simulador.ods (versión LibreOffice Calc)

http://www.hojamat.es/estadistica/tema1/open/simulador.xlsm (versión Excel)

Contiene dos hojas, la de criterios y simulación y la de los estadísticos. La mejor forma de aprender su funcionamiento es proceder a la primera simulación.

Deseamos saber si con 1000 tiradas de dados su media y varianza se acercan suficientemente a la teoría. Para ello, en la primera página del simulador concretamos lo siguiente:



Cinco repeticiones de 200 filas y una columna, para que se acumulen 1000 tiradas, mínimo=1 y máximo=6. Como criterios, “Uniforme”, “Entero”, para que la distribución sea discreta, y “Máximo-Mínimo”. También es conveniente fijar, unas celdas más abajo, el número de intervalos en 6. El resto de parámetros se puede ignorar. Con ello, al dar al botón Simulador obtendrás los resultados en la siguiente hoja de Estadísticos. En nuestro caso serían:



Se ha obtenido una aproximación apreciable. La herramienta también nos proporciona la asimetría y la kurtosis, pero prescindimos de ellas en esta simulación. A la derecha puedes observar la tabla de frecuencias y el diagrama de barras, que presenta una uniformidad de alturas bastante aceptable para el número de simulaciones que hemos fijado:


Como ya sabrás, es probable que, si aumentamos el número de repeticiones, el ajuste mejore, pero no lo des por seguro, que sólo existe una probabilidad. Si aumentamos a 50 repeticiones obtenemos:



Ha mejorado bastante el ajuste. En general, las simulaciones comienzan a ser útiles si las repites miles de veces. Con unas pocas no son útiles.


Distribución uniforme continua

En esta modalidad los datos se distribuyen de forma continua (en la práctica, con todos los decimales que deseemos) entre dos extremos a y b. Prácticamente no hay ejemplos en la vida diaria de distribuciones uniformes, ya que son más frecuentes otras, como la normal.  Suelen aparecer en experimentos diseñados o en instrumentos creados por nosotros, como puede ser el movimiento de las manecillas de un reloj, que recorre de manera uniforme toda la circunferencia.

Un ejemplo de distribución uniforme continua es el experimento de calcular π mediante simulación (método de Montecarlo). Consiste en simular dos coordenadas X e Y de manera uniforme entre 0 y 1 y contar aquellos pares en los que X^2+Y^2<1. De esa forma, su frecuencia relativa deberá ser ?/4=0,7854 aproximadamente. En la imagen sería como contar todos los puntos que caen dentro de la zona sombreada.


Lo organizaremos así:

Planteamos los criterios contenidos en la imagen:



Tomamos 500 filas y dos columnas (que representarán X e Y). No planteamos repeticiones porque añadiremos una columna nueva a la simulación. Concretamos un mínimo de 0 y un máximo de 1. En los restantes criterios elegimos “Uniforme”, “Decimal” (por ser continua) y “Máximo-Mínimo”.

Con ello obtenemos dos columnas de 500 valores de X e Y. Ahora, en una columna paralela, por ejemplo comenzando en J5, escribimos =SI(G5^2+H5^2<1;1;0). Esto significa que obtendremos un 1 si el punto (X,Y) pertenece al sector circular sombreado, y 0 si está fuera. Extendemos esa fórmula hacia abajo hasta abarcar los 500 valores:



Ahora basta sumar esa columna nueva y deberemos obtener un valor próximo a 500π/4393. Esto no se suele obtener en una simulación con tan pocos datos. En nuestro caso se ha obtenido 389. Podemos repetir el trabajo (de forma manual) varias veces y encontrar la media de resultados. Aquí tienes un ejemplo, con 7 repeticiones o 3500 casos:

389, 408, 383, 389, 392, 386, 384

Sumo y obtengo 2731, divido entre 3500 (para encontrar la frecuencia relativa) y multiplico por 4 para aproximar a ?: 2731/3500*4=3,1211. No es una extraordinaria aproximación a π, pero resulta aceptable si tenemos en cuenta las herramientas utilizadas.

Análisis de intervalos

En una de las actualizaciones del Simulador hemos añadido una simulación entre intervalos. En el caso de la distribución uniforme nos servirá para analizar la igualdad aproximada de las frecuencias en intervalos de igual longitud.

En la segunda hoja Estadísticos figura una tabla y un botón para obtener frecuencias f entre dos extremos a y b . Estos extremos se consideran alcanzables, por lo que en las distribuciones discretas estarán incluidos. En la última fila se calcula la frecuencia relativa h. Sólo se puede usar para tres columnas o menos. Basta fijar los extremos en cada columna, pulsar el botón Intervalos y comparar resultados.

La imagen corresponde a una simulación uniforme continua entre 10 y 20, con tres columnas. En cada una de ellas hemos fijado extremos con una diferencia de 4, con lo que las tres frecuencias relativas se acercan a 0,4.



jueves, 18 de octubre de 2018

Escaladas de Conway


El año pasado, 2017, se notificó que una conjetura de Conway, conocida como “escalada a un primo” había resultado ser falsa. Tienes la noticia, comentarios y contraejemplos en estos dos blogs:

http://francis.naukas.com/2017/06/14/contraejemplo-a-una-conjetura-de-conway-sobre-los-primos/

https://www.gaussianos.com/la-conjetura-de-la-escalada-hasta-un-primo/

Si los has leído (y si no, te bastará con mi explicación) entenderás que el proceso que propone Conway es el de descomponer el número en sus factores primos agrupados con exponentes y ordenados en orden creciente, como 144=24*32, y después escribir seguidos y mezclados bases y exponentes de las potencias resultantes (2432).

Si un número primo está elevado a la unidad, esta se ignora y no se añade al nuevo número.

Si llamamos f(n) a esa función obtendremos:

f(144)=2432

La idea de Conway es la de ir reiterando esta función hasta llegar a un número primo p, en el que es evidente que f(p)=p, dando fin al proceso.
En el caso del 144:

F(144)=2432, f(2432)=2719, que es primo y con él termina el proceso.

Los dos blogs citados te darán más detalles. Nuestro objetivo en esta entrada es conseguir el algoritmo con el Visual Basic de las hojas de cálculo. Es, por tanto un interés operativo más que matemático.

Función fconway(n)

A continuación se inserta el listado para hoja de cálculo de la función de Conway, pero antes hay que acudir a la función ajusta(n), que elimina del número n los espacios en blanco que Excel o Calc añaden a los números naturales. Su código es el siguiente:

Function ajusta$(a)
Dim d$

d$ = Str$(a) ‘Convierte el número en un string
While Left$(d$, 1) = " " ‘Mientras esté precedido de un espacio, este se elimina
d$ = Right$(d$, Len(d$) - 1) ‘Se corta el string desde su segundo carácter
Wend
ajusta$ = d$
End Function 

Una vez contamos con esta función, se tratará ahora de descomponer el número en factores y concatenar factores primos y exponentes, eliminando aquellos iguales a la unidad. Puede ser así:

Public Function fconway(n)

Dim primo(20), expo(20), numomega ‘Reservamos 20 memorias para primos y exponentes
Dim s$
Dim f, a, e, i


a = n ‘Recibimos n en la variable a
f = 2: i = 0: numomega = 0 ‘numomega es el número de primos
While f * f <= a ‘Vamos extrayendo primos hasta la raíz cuadrada de a
e = 0
While a / f = Int(a / f)
e = e + 1 ‘Se toma nota del exponente, que va creciendo
a = a / f ‘Se elimina el factor primo encontrado
Wend
If e > 0 Then ‘Se incorpora el nuevo primo con su exponente a las memorias
numomega = numomega + 1
primo(numomega) = f
expo(numomega) = e
End If
If f = 2 Then f = 3 Else f = f + 2 ‘Se avanza en posibles primos
Wend
If a > 1 Then ‘Se recoge el último primo
numomega = numomega + 1
primo(numomega) = a
expo(numomega) = 1
End If
s$ = "" ‘Construimos la concatenación de primos y exponentes mayores que 1
For i = 1 To numomega
s$ = s$ + ajusta(primo(i)) ‘Se incorpora el primo
If expo(i) > 1 Then s$ = s$ + ajusta(expo(i)) ‘Se añade el exponente si es mayor que 1
Next i
fconway = Val(s$) ‘Convertimos el string en número
End Function

Si escribimos un número cualquiera (en los blogs citados no se recomienda usar el 20) en una celda de Excel y tenemos implementada la función anterior (debes entrar en Programador – VisualBasic. Puedes consultar http://hojamat.es/guias/descubrir/htm/macros.pdf), podemos calcularla en la celda inferior, y después extenderla hacia abajo hasta que el resultado se repita o alcancemos una magnitud para la que Excel pasa a notación científica. Puedes ver algún ejemplo en la imagen:



En el primero, se alcanza el primo inmediatamente. En el segundo, al segundo intento, como ya vimos más arriba. El siguiente sobrepasa la capacidad de Excel, y el cuarto llega al primo en cinco pasos.

Podemos convertir este proceso en una función, pero si llegamos a los límites de Excel habrá que devolver un valor que lo indique, como podría ser el cero. Hemos diseñado esta:

Public Function finconway(n)
Dim a, b

a = 1: b = n ‘Usamos dos variables para cada iteración
While a <> b And a < 100000000000# And a > 0 ‘Límites de la iteración
a = b ‘Guardamos b en la variable a
b = fconway(b) ‘Avanzamos un paso en la iteración
If a >= 100000000000# Then a = 0 ‘Si el número es muy grande, lo hacemos cero
Wend
finconway = a
End Function

Con esta función se resuelve rápidamente el ascenso a primo. Aquí tienes los resultados desde 5 hasta 15, por ejemplo:



Esta función, aplicada al 542, devolvería un 0, ya que sobrepasa el límite de Excel para la escritura de todas las cifras. Este inconveniente se salva usando otro lenguaje. Hemos adaptado y completado la función en PARI incluida en la sucesión http://oeis.org/A080670 para definir la función finconway en ese lenguaje. Su código es:

fconway(n)=if(n>1, my(f=factor(n), s=""); for(i=1, #f~, s=Str(s, f[i, 1], if(f[i, 2]>1, f[i, 2], ""))); eval(s), 1)
finconway(n)=my(a=1,b=n);while(a<>b&&a>>0,a=b;b=fconway(b));a

Con ella es fácil reproducir los resultados de la tabla anterior:



Con el lenguaje PARI sí podemos encontrar el primo al que llegan las iteraciones con inicio en 542. Sería 131811420855589. En la imagen se puede observar cómo lo presenta PARI:



La conjetura

Si has leído las entradas de blog recomendadas más arriba, sabrás que existe un contraejemplo en el que la iteración no asciende a un primo, sino a un compuesto. Se trata del valor 13532385396179=13*532*3853*96179

Con nuestra función en PARI se detecta su invariancia en la iteración:

fconway(n)=if(n>1, my(f=factor(n), s=""); for(i=1, #f~, s=Str(s, f[i, 1], if(f[i, 2]>1, f[i, 2], ""))); eval(s), 1)
finconway(n)=my(a=1,b=n);while(a<>b&&a>>0,a=b;b=fconway(b));a
print(finconway(13532385396179))

En la imagen observamos que el resultado es el mismo valor:



Con esto terminamos, ya que el único objetivo era usar medios elementales para reproducir los ascensos a primo de Conway y el contraejemplo descubierto recientemente.

lunes, 8 de octubre de 2018

Acercamiento entre potencias


Se sabe que sólo existen dos potencias que se diferencien en una unidad, que son 8=2³ y 9=3². Sí pueden existir otros casos con diferencias mayores entre cuadrado y cubo. Vemos los primeros ejemplos:

Dif=2: 5²+2=3³
Dif:=3: 2²-3=1³
Dif=4: 2²+4=2³; 11²+4=5³
Dif=5 y 6: No hay ejemplos elementales
Dif=7: 1²+7=2³; 181²+7=32³
Dif=8: 3²-8=1³; 4²-8=2³; 312²-8=46³
Dif=9: 6²-9=3³; 15²-9=6³; 253²-9=40³
Dif=10: No hay ejemplos elementales.

Todos son casos particulares de la ecuación x²=y³+k, que necesita conocimientos profundas de Teoría de Números para su resolución. Por eso, aquí se usarán técnicas de búsqueda de soluciones en casos particulares.

Diferencias entre cuadrados y cubos

Podemos usar una función que mida el acercamiento a un cubo. Así, si se construye una lista de cuadrados, se podrán elegir aquellos que se diferencien de un cubo en un número dado. Así se han encontrado los ejemplos del párrafo anterior.

La función adecuada puede ser esta, que está diseñada para cualquier valor del exponente. Actúa sobre un número (que puede ser otra potencia), una diferencia dada y el exponente de la potencia. Al número le sumamos y restamos la diferencia dada, y con otra función, espotentipo, se averigua si es potencia perfecta o no.


Public function difepot(n,dife,ex1) as boolean
'para un número n ver si dista dife unidades de una potencia dada
‘Variables: n es el número, dife, la diferencia dada y ex1 el exponente de la potencia.

dim a,b
dim es as boolean

es=false ‘Declaramos que la función es falsa
a=n+dife ‘Buscamos la potencia “por arriba”
if espotentipo(a,ex1) then ‘Más abajo se explica esta función
es=true ‘Si es potencia, la diferencia es válida.
else
b=n-dife ‘Buscamos la potencia “por arriba y procedemos del mismo modo”
if b>0 then
If espotentipo(b,ex1) then es=true
end if
end if
difepot=es
end function

La función espotentipo busca si un número es potencia con un exponente dado. Actúa sobre el número y el exponente y devuelve VERDADERO o FALSO. Su código es el siguiente:

Public Function espotentipo(n, k) As Boolean
Dim m, i
Dim e As Boolean

m = Log(n) / k
m = Int(Exp(m)) ‘Mediante logaritmos, encuentra un posible valor para la base de la potencia
e = False
For i = m - 1 To m + 1 ‘Por si existen errores de redondeo, prueba con m, m+1 y m-1
If i ^ k = n Then e = True ‘Si con uno de ellos se reconstruye la potencia, es válido
Next i
espotentipo = e
End Function

Con estas dos funciones, bastará crear una lista de cuadrados y ver si alguno de ellos se diferencia de un cubo (mayor o menor que él) en una cantidad dada.  Por ejemplo, si construimos la lista de los veinte primeros cuadrados, veremos que al llegar al 14, su cuadrado se diferencia en 20 unidades del cubo de 6: 14²+20=6³.

Potencia más cercana

Podemos encontrar, para un número cualquiera, la potencia de cierto exponente que esté más cercana, y evaluar su diferencia. Para ello podemos usar esta otra función:

Public function difepot2(n,ex1)
'busca la potencia ex1 más cercana y devuelve la diferencia
dim p,q

p=int(n^(1/ex1))
dife=abs(n-p^ex1)
q=abs(n-(p+1)^ex1) ‘Busca la potencia si es menor o mayor. Ambas valen.
if q<dife then dife=q ‘Se queda con la diferencia menor.
difepot2=dife
end function

En esta tabla puedes observar las diferencias con el cubo más cercano. Se descubre que esos cubos son el 8 o el 27. Hasta el 17, el cubo más cercano es el 8, y a partir del 18, el 27.

Versión en PARI

Estas funciones de Excel no tienen mucha potencia de cálculo. Por eso, en algún momento usaremos sus versiones en PARI, cuyo código es el siguiente:

espotentipo(n,k)=local(m,i,es);m=log(n)/k;m=truncate(exp(m));es=0;for(i=m-1,m+1,if(i^k==n,es=1));es
difepot(n,ex1)=local(p,q,dife);p=truncate(n^(1/ex1));dife=abs(n-p^ex1);q=abs(n-(p+1)^ex1);if(q<=dife,dife=q);dife

Con el uso de ambas, hemos reproducido la tabla anterior entre el 10 y el 20:



Como ejemplo del uso de esta función, se inserta a continuación la tabla de diferencias entre cuadrado y cubo menores que 10 (y mayores que 0) para potencias interiores a 1000000:


Otras potencias

Diferencias mínimas entre cubo y cuarta potencia, dife<30:



Entre cuartas y quintas potencias, dife<50:



Así podemos seguir con otros casos. Terminamos con cubos y séptimas potencias:



Para terminar, agrupamos en una misma tabla diferencias menores que 10 en algunos casos. Hemos eliminado en la segunda potencia los valores 1 y 2, ya conocidos y triviales: