jueves, 11 de diciembre de 2025

Pandigitales inesperados

Hay varias acepciones de la palabra pandigital. Aquí nos referiremos a los pandigitales completos sin repetición, es decir, que consideraremos pandigitales a aquellos números de 10 cifras en las que figuren todas del 0 al 9 en cualquier orden y sin repetir ninguna. No se admite cero inicial. Excel lo suele suprimir, pero habrá que tener cuidado en otros lenguajes de programación.

Con esta definición es sencillo calcular por Combinatoria cuantos pandigitales de este tipo puede haber. Inténtalo.

Función para detectar pandigitales

Para esta detección se crea un vector de 10 elementos, ci(10), y en cada uno se cuentan las apariciones de una cifra determinada del número. Para que sea pandigital, todos los elementos han de ser iguales a 1. En cualquier otro caso, no lo será.

Función pandigital

Public Function pandigital(a) As Boolean

 

'han de estar todas las cifras sin repetición y sin cero inicial

 

Dim ci(10)’ Contenedor de cifras

Dim i

Dim t As Boolean

 

t = True ‘En principio suponemos que es pandigital

n = numcifras(a) ‘Se puede conseguir también sumando 1 a su logaritmo decimal

If n <> 10 Then pandigital = False: Exit Function ‘No tiene diez cifras

For i = 0 To 9: ci(i) = 0: Next I ‘Contadores a cero

For i = 1 To n

ci(cifra(a, i)) = ci(cifra(a, i)) + 1’ Se cargan las cifras encontradas

If ci(cifra(a, i)) > 1 Then pandigital = False: Exit Function ‘Si hay repetidas, no es pandigital

Next i

s = 0

For i = 0 To 9

If ci(i) = 0 Then t = False ‘Si falta una cifra, no es pandigital

Next i

pandigital = t ‘Devuelve VERDADERO o FALSO

End Function

 

Resultados inesperados

 

La idea de hoy es buscar pandigitales en distintas circunstancias u operaciones. Predominarán productos y potencias, como ejemplos favorables a encontrar pandigitales, pero sólo serán ejemplos de uso para facilitar a los lectores la búsqueda en otros casos similares. Se pueden abordar muchos.

 

Vemos algunos ejemplos con nuestro buscador:

 

Multiplicar un número por otro relacionado

 

A partir de este ejemplo hay que tener en cuenta que los pandigitales están comprendidos entre 10^9=1000000000 y 10^10=10000000000. Sería inútil buscar fuera de este intervalo.

 

Multiplicamos N por N+1

 

En este primer ejemplo, podemos comenzar la búsqueda por RAIZ(10^9)-1, para que N(N+1) entre en ese intervalo. La salida puede ser RAIZ(10^10)+1. Esto no es demasiado importante. Se puede ampliar algo el rango. Nuestro buscador nos da 52 soluciones. Estas son las primeras:



No esperaba tantos resultados. Se ve que el producto de consecutivos tiene características favorables. He probado con N(N+2) y resultan 34. Con N(N+3), 99. Como era de esperar, es algo que resulta aleatorio en la práctica. Con otras diferencias se obtienen números similares.

 

Un número multiplicado por su doble produce resultados parecidos.

 

Uso de potencias

 

Cuadrado de N

 

Si lo reducimos a su cuadrado, es decir un número por sí mismo, está publicado en https://oeis.org/A054038 con otros planteamientos, pero coincide mi buscador para pandigitales sin repetición, que resultan ser 87.

 

Estos son los primeros:

 


Podíamos operar N con N2, a ver qué ocurre.

Con suma aparecen bastantes resultados. Uno es:

40508+40508^2=1640938572

Con cubos no he obtenido ningún pandigital.

Otras potencias

Para las potencias es preferible usar el lenguaje PARI, porque maneja las cifras con más soltura que Excel.

 

El criterio para saber si un número es pandigital puede ser este:

 

vecsort(digits(n))==[0..9] &&n>=10^9

 

Se interpreta fácilmente: se ordenan los dígitos de n en un vector y ha de coincidir con [0..9]. Además, no puede tener cero inicial, ha de ser mayor o igual que 109.

 

Con estas líneas de PARI podemos investigar potencias. Están adaptadas a cuadrados para probar, escribiendo k=2. Cambiando k se pueden investigar otras potencias.

pandigital(n)=vecsort(digits(n))==[0..9]&&n>=10^9

k=2

a=truncate(10^(9/k))

b=truncate(10^(10/k))

for(i=a,b,m=i^k;if(pandigital(m),print(i," , ",m)))

Este es un recorte de pantalla para k=2 en la web de PARI:


Observamos que coincide con el resultado de Excel.

No he encontrado pandigitales en los exponentes del 3 al 10, pero nos ha servido para iniciar el uso de PARI.

Otras búsquedas

Número por su simétrico en cifras

Aquí sí tendremos éxito. En Excel uso mi función CIFRAINVER y en PARI mi función REVERSE. Elijo este porque lo tengo desarrollado más brevemente. Podríamos usar lo siguiente:

pandigital(n)=vecsort(digits(n))==[0..9]&&n>=10^9

reverse(n)=eval(concat(Vecrev(Str(n))))

a=2

b=1000

for(i=a,b,m=i*reverse(i);if(pandigital(m),print(i," , ",m)))

Definimos pandigital y reverse y después multiplicamos el número por su reverso:



Si multiplicas cualquier número de la primera columna por su simétrico, obtendrás el pandigital de la segunda.

Otros ejemplos sin desarrollar

Un número multiplicado por su doble:



Por ejemplo. 22887*45774=1047629538

Cuadrado de N menos N



Así, 44028^2-44028=1938420756

Todos terminarán en 0, 2 o 6.

Y hasta aquí llega el tema. Quedan muchas posibilidades, e incluso eligiendo las primeras cifras de un número real, pero aquí sólo se estudian los enteros.

 

No hay comentarios: