miércoles, 25 de enero de 2023

Concatenación bilateral de cifras (1)

 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.


Es fácil descubrir en ella la constancia del valor 0, ya que corresponde a los primos y estos no cambian, son 168. También se entiende que las cifras 3 y 9 presentan menos casos, por el problema ya explicado de los múltiplos de 3. Por último, de los que admiten extensiones a primo los más frecuentes son los que solo admiten una.

No hay comentarios: