viernes, 24 de junio de 2016

¿Cómo generar números primos, es posible generar un número primo mediante una función?

Seguimos con el interesante tema de los números primos, esta vez toca uno de las cuestiones que más ha quebrado la cabeza, y es la posibilidad de poseer una exótica función en la que entrando un valor, nos aparezca el número primo con el número de cifras que queramos, eso evidentemente sería el sueño de los criptólogos y criptografos, y de algún sombrero negro, pero estamos lejos de conseguirlo para todos ellos.

Existen algunas funciones polinomiales con valores límite, fuera de ellos, no se garantiza la primalidad.

podemos encontrar una gran cantidad de polinomios generadores, todos tienen validez limitada, no hay un polinomio que genere para cualquier n, un entero primo sin limitación 




 Algunos son capaces de generar hasta 57 números primos, con n desde 0 a 56.

Podemos tener la tentación de tomar una serie de números primos, por ejemplo los 100 primeros números primos, y los representamos, obtenemos la siguiente grafica


 Se ha ha usado el siguiente código en Mathematica para el representación gráfica (los ejes están a distinta escala)

 data = Table[{n, Prime[n]}, {n, 100}]; (* primeros np numeros primos*)
 ListPlot[data, AxesLabel -> {n, numero primo}]

Y la segunda tentación es la creer que vemos un patrón, claramente, que podemos generar un polinomio con el que podamos calcular un número primo  ??? se nos dilatan las pupilas y se nos acelera el pulso.

Vamo a usar otra herramienta de Mathematica, la función Interpolation, y calculamos la función de interpolación a trozos usando el código:

f = Interpolation[data];
Show[ListPlot[data, PlotStyle -> Red], Plot[f[x], {x, 1, np}]]




obtenemos la siguiente gráfica


 

 Aquí es donde nos ponemos más nerviosos, ya se nos acelera mas el pulso y comenzamos a sudar.

¿ que pasa con valores fuera del rango con el que hemos realizado el cálculo??

Vamos a ir probando, como  somos muy pillines usaremos la función PrimeQ, para realizar el test de primalidad.

Probamos con los 10 siguiente ya fuera del rango

For[i = 100, i <= 110, i++,
 Print[f[i], "  ", PrimeQ[f[i]]]
 ]

541  True
601  True, que miedo esto funciona, soy el nuevo Bernhard Riemann
729  False, mi gozo en un pozo, al tercero, es decir n=102, la pifiamos
 La trampa está en que  necesitamos conocer los números primos del intervalo para calcular la función de interpolación, fuera es tierra incognita

Resultado de imagen de fracaso



evidentemente no iba a funcionar, pero es un interesante ejercicio que creo que todo/as hemos intentado alguna vez.

Ya tenemos el reto de buscar funciones con las que podamos calcular números primos

Supongo que os queda la duda de ¿ Cómo los calcula Mathematica??.











 Evidentemente continuará...

No hay comentarios:

Publicar un comentario