Extensión a un número primo
En esta entrada
modificaremos algunos números mediante la concatenación de cifras a ambos lados
de las suyas propias, y de forma simétrica. Como es un tema muy amplio, con
muchas posibilidades, iniciaremos el estudio con algunas de ellas, y
terminaremos cuando sea claro que se ha perdido interés.
Ya en otra entrada
estudiamos la duplicación de unidades manteniendo el mismo tipo de número (ver https://hojaynumeros.blogspot.com/2019/09/sigue-el-mismo-tipo-al-duplicar-las.html)
Conversión
en primo mediante una cifra repetida
Si tomamos un número
cualquiera, como el 14622, existe la posibilidad de convertirlo en primo
adosándole cualquiera de las cifras impares 1, 3, 7 o 9. En este ejemplo
tendríamos estas primeras posibilidades con la cifra 1:
1146221
1111146221111
111111462211111
1111111111111111111146221111111111111111111
Estos cuatro números son
primos.
En este caso no hemos
descubierto una prolongación a primo con las cifras 3 o 9. La razón es que
14622 es múltiplo de 3, y al adosarle la cifra 3 o la 9 no puede ser primo.
Con la cifra 7 hemos
intentado hasta 400 concatenaciones, sin que resulte un número primo. Esto nos
dice que el proceso es más complejo de lo que pudiera parecer en un principio,
pues puede ocurrir que no haya solución a nuestro alcance con una cifra impar concreta.
Como pueden existir
comportamientos muy distintos con las cuatro cifras 1, 3, 5 y 7, sería útil
diseñar una función con dos parámetros, uno el número que deseemos prolongar y
otro la cifra que adosemos. Para Excel podría valer esta:
Function extenprimo$(n, c)
Dim i, j, k, p, m
Dim s$
s = ""
If esprimo(n) Then
extenprimo = Str$(n): Exit Function
m = n
For i = 1 To 12
p = numcifras(m)
m = 10 ^ (p + 1) * c + 10 *
m + c ‘Adosa cifras bilateralmente
If esprimo(m) Then s = s +
"#" + Str$(m)
Next i
If s = "" Then s =
"NO"
extenprimo = s
End Function
Esta función devuelve una
cadena de texto con todas las soluciones posibles. Los parámetros son, el
número n y la cifra c, y el resultado es el mismo número si
es primo, un “NO” si no se encuentra solución o una lista de soluciones
encontradas.
Aquí tienes ejemplos de
estos casos:
Un gran problema del uso de la hoja de cálculo es que a partir de unos valores pasa los resultados a notación científica, con lo que se pierden cifras y se anula la utilidad del proceso. Por eso, en la función, solo se llega a doce cifras.
La solución a esto es
cambiar a programas o lenguajes que usen todas las cifras posibles, pero
entonces el fallo puede estar en la detección de primos. Por ejemplo, PARI, a
partir de 2^64, sustituye la función isprime por ispseudoprime, que para
otras tareas puede valer, pero en esta introduce una falta de seguridad en la
finalización del proceso. Consecuencia de esto es que nos tendremos que mover
con objetivos lúdicos, y no teóricos. Lo que afirmemos será siempre una
conjetura, sin valor teórico.
La traducción de la función
a PARI puede ser:
exten(n,c)={my(i,p,k=0,m=n);while(k==0&&i<200,p=#digits(m);m
= 10 ^ (p + 1) * c + 10 * m + c;if(ispseudoprime(m),k=m);i=+1);k}
Aquí llegamos a 200 cifras, pero
podrían ser más, siempre que usemos ispseudoprime.
Si nuestro interés estuviera
en la detección del menor primo, estos inconvenientes no serían tan graves.
Esto es lo que hemos introducido en PARI, que detiene el proceso cuando detecta
un primo, al que nombramos como E(N). También se puede parar el proceso en
Excel.
Al detener el proceso en la
primera solución, podremos asignar a cada número un índice K(N) que indique
cuantas concatenaciones ha necesitado para llegar a un primo.
Aquí tienes un ejemplo de
estos conceptos, con la cifra 1:
Aparecerá un -1 cuando la función no sea capaz de detectar un primo, lo que ocurre en 134, 136, 138 y 140. Obtendremos un 0 si el número ya es primo, y el número de concatenaciones necesarias en el caso de que sí exista solución, como en 132 y 133.
Algoritmo
Una pequeña modificación en
las funciones anteriores nos dará fácilmente la función K. En hoja de cálculo
puede ser esta:
Function extenprimo(n, c)
Dim i, k, p, m, s
s = 0: k = 0
If esprimo(n) Then
extenprimo = 0: Exit Function
m = n
i = 1
While i <= 12 And k = 0
p = numcifras(m)
m = 10 ^ (p + 1) * c + 10 *
m + c
s = s + 1
If esprimo(m) Then k = 1
i = i + 1
Wend
If k = 0 Then s = -1
extenprimo = s
End Function
Si se ha entendido la
primera versión, esta no presentará dificultad. Devuelve -1, 0 o un entero
positivo según la tabla de más arriba. La hemos reproducido en Excel para
cotejar los valores:
Como curiosidad, en la
siguiente tabla figuran las frecuencias de los valores de K(N) para los mil
primeros números.
La frecuencia más alta
corresponde a la prolongación con un solo 1, y la frecuencia 1 es la del número
24, cuya prolongación mínima es 1111111241111111. Lo hemos dado como ejemplo.
En la siguiente tabla
comparamos las estadísticas para las cuatro cifras 1, 3, 7 y 9.
No hay comentarios:
Publicar un comentario