sábado, 18 de junio de 2016

NUMEROS PRIMOS EN BÚSQUEDA Y CAPTURA II

No hace mucho puse un post sobre el problema que puede ocasionar en USA, el disponer de un determinado número primo, el motivo por el que escribo esta entrada es uno de los problemas que posiblemente nos plantearan en nuestra vida académica, y ese problema es el de estimar la cantidad de números primos menores o iguales que uno dado.

Las primeras estimaciones nos remontan a Gauss y Legendre, que en su momento generaron controversia sobre quien fue el primero de los dos en estudiar la distribución de primos en un determinado intervalo.

Fue Gauss el primero en definir una fórmula para estimar dicho valor, con la siguiente expresión:
 

esta expresion no daría una estimación del número de primos menores o iguales a n, para n grandes se aleja de los datos reales, dando valores menores, se puede usar como cota inferior ¿?

Posteriormente Legendre publicó otra expresión similar:


menos elegante que la anterior, pero en su medida efectiva, se acerca más que la primera expresión de Gauss.

Posteriormente Gauss perfeccionó el método con la siguiente expresión para un número n.



 



Pero Gauss desarrolló otra expresión que denominó logaritmo integral Li(x), que tiene una expresión (integral claro) similar a la anterior


 


 y nos queda Riemann que nos da para otra entrada

 O dejo el código en MatLab de una función que realiza los cálculos, el código está lleno de comentarios explicativos, no se ha incluido el método del logaritmo integral.

 function [ gauss,legendre,gauss_2 ] = numeroprimos( n )
%numero de primos menores o iguales que n
%   nos da un valor aproximado, no es un valor exacto
clc % borrado de pantalla
% control del valor de la entrada del número
    if fix(n)~=n || n<=1
       fprintf('El valor introducido no es valido \n')
       fprintf('Introducir un valor entero positivo mayor que uno\n')
       return
    end
% calculos
gauss=fix(n/log(n)); % segun Gauss
legendre=fix(n/(log(n)-1.08366)); % segun Legendre
% segundo criterio de Gauss o de los logaritmos
gauss_2=0; % valor inicial
for i=2:n
   gauss_2= gauss_2+1/log(i);
end

% impresion de resultados
fprintf('Para el primer criterio de Gauss \n')
fprintf('Numero de primos menores o iguales a %d es %d \n',n,gauss)
fprintf('Para el segundo criterio de Gauss \n')
fprintf('Numero de primos menores o iguales a %d es %d \n',n,fix(gauss_2))
fprintf('Para el metodo de Legendre \n')
fprintf('Numero de primos menores o iguales a %d es %d \n',n,legendre)
 
end



No hay comentarios:

Publicar un comentario