sábado, 12 de abril de 2014

Primo mínimo detrás de un cuadrado


En la entrada anterior (http://hojaynumeros.blogspot.com.es/2014/04/comprobar-conjeturas-con-hoja-de.html) estudiamos la conjetura de Legendre y terminamos con la formulación siguiente: La conjetura de Legendre es equivalente a la afirmación de que entre dos números consecutivos n y n+1 siempre existe un número que es la raíz cuadrada de un número primo.


La conjetura nos afirma que existe uno al menos, pero lo normal es que existan más. Nos fijaremos en el primer número primo que es mayor que un cuadrado dado n2, y que, por tanto, su raíz cuadrada sea la más cercana de este tipo al valor de n. Esos valores son fáciles de encontrar. Aquí tienes una función en BASIC:

Function primomincuad(n)
 a=n*n+1
while not esprimo(a)
a=a+1
wend
primomincuad=a
End function

Dado un valor de n, esa función encuentra el menor número primo que es mayor que su cuadrado. Ya se conocen los valores de estos primos:

2, 5, 11, 17, 29, 37, 53, 67, 83, 101, 127, 149, 173, 197, 227, 257, 293, 331, 367, 401, 443, 487, 541, 577, 631, 677, 733, 787, 853, 907, 967, 1031, 1091, 1163…
http://oeis.org/A007491

Las raíces cuadradas de estos números estarán comprendidas entre n y n+1. Por ejemplo, el octavo, que es 67, tiene su raíz cuadrada entre 8 y 9, como se ve sin calcularla.

Estos valores nos plantean una pregunta inocente: ¿Qué diferencias concretas existen entre cada número natural y la raíz cuadrada de primo más próxima?

Para encontrar esa raíz podemos usar la fórmula a = RAIZ(PRIMPROX(N ^ 2)). La hemos utilizado para crear este gráfico de diferencias:



Es muy curioso, porque esas diferencias oscilan con tendencia decreciente desde 0,4142 hasta acercarse a cero. Podíamos plantearlo como una conjetura:

Conjetura 1: Las diferencia entre cualquier número natural y la raíz cuadrada del mínimo número primo mayor que su cuadrado es siempre igual o menor que la raíz cuadrada de 2 menos 1.

Es razonable pensar en esta conjetura. Por una parte la hemos comprobado hasta 5*10^7 con este código PARI:

{for(i=1,5*10^7,b=sqrt(nextprime(i*i))-i;c=sqrt(2)-1;if(b>=c,print(i)))}

Si lo ejecutas verás que sólo imprime el valor 1. Los siguientes números producen diferencias más pequeñas.

Por otra, vemos que los valores son claramente decrecientes en conjunto. Realizamos algunas aproximaciones. ¿Cuántos primos se pueden esperar entre n2 y  (n+1)2?

Si usamos el Teorema de los números primos podemos establecer una aproximación grosera

(http://es.wikipedia.org/wiki/Teorema_del_n%C3%BAmero_primo)


Y más grosera y atrevida aún: si se esperan P primos entre los dos cuadrados consecutivos, el primero de ellos distará de n2 una distancia del orden de la fracción inversa, 2Ln(n)/(2n+1). ¿Será así? Recuerda que hablamos de tendencias, no de valores individuales.

Hemos construido una tabla doble: en una columna los valores de RAIZ(PRIMPROX(N ^ 2))-N y en la otra los de 2Ln(n)/(2n+1), con este resultado gráfico:









Vemos que la tendencia decreciente es razonable, luego podemos confiar en que nuestra conjetura sea cierta, que las diferencias nunca son mayores que 0,4142…¡Sólo confiar, nada más!

Conjetura 2: Dado un número natural cualquiera K, existe otro N tal que la diferencia (en valor absoluto) entre su cuadrado N2 y el mínimo primo mayor que él sea igual a K.

Expresado de otra forma, la expresión PRIMPROX(N ^ 2)-N^2 puede tomar cualquier valor.  Esta idea aparece cuando obtienes una lista de valores de N, tomas nota de esa diferencia en una hoja de cálculo y la ordenas después por los valores de la diferencia. No nos cabe aquí la tabla adecuada para que veas que se recorren todos los valores, pero puedes construirla en la hoja de cálculo conjeturas,xlsx  (ver http://hojamat.es/sindecimales/divisibilidad/herramientas/herrdiv.htm#conjeturas)

Algunos valores se resisten a salir, como el 29, 68 y 78, pero al final los obtienes. Puedes construir esta función que te devuelve el primer valor posible para K:

Public Function difproxprim(k)
Dim n, m
n = 0: m = -1
While k <> m
n = n + 1
m = primprox(n * n) - n * n
Wend
difproxprim = n
End Function

Si juegas con ella te darás cuenta de que puede resultar muy lenta en una hoja de cálculo, por ejemplo para obtener que el 68 aparece en la lista para K=5187.

Puedes usar la misma idea en PARI:

difproxprim(k)={local(m=-1,n=0);while(k<>m,n=n+1;m=nextprime(n*n)-n*n);return(n)}
{print(difproxprim(68))}

En ella sustituyes después el 68 por otro número. Por ejemplo, el 88 se retrasa hasta K=11499 y el 200 hasta K=90963. Es un poco atrevido plantear esta conjetura, pero también es razonable.