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:
Publicar un comentario