Desarrollamos otros dos ejemplos:
Primos que se descomponen en suma de dos cuadrados
Sabemos que si un primo es de la forma 4k+1 se podrá descomponer en suma no trivial de dos cuadrados, siendo esto imposible si es de la forma 4k+3. Podríamos comprobar este hecho mediante un barrido.
Obtenemos una lista de primos y los acompañamos con un símbolo, y al lado su resto módulo 4.
Después engendramos todas las sumas de dos cuadrados en un rango adecuado, que puede ser la raíz cuadrada del último primo de la lista, o algo mayor por precaución ante redondeos. Para cada suma buscamos en la lista de primos si coincide con ella. En caso positivo borramos el símbolo, y quedarán como resultados negativos los que posean resto 3 respecto a 4.
Por si deseas profundizar, copiamos el código empleado en OpenOffice Calc, que puedes adaptar a tu caso cambiando la hoja, filas y columnas y también a Excel.
sub primos2cuad
dim i,j,k, rango
rango=15
for i=1 to rango
for j=1 to i
a=i^2+j^2
for k=1 to 50
if StarDesktop.CurrentComponent.sheets(1).GetCellByPosition(3,k).value=a then
StarDesktop.CurrentComponent.sheets(1).GetCellByPosition(4,k).string=" "
end if
next k
next j
next i
end sub
Conjetura de Goldbach
Cuando se conoce por primera vez la conjetura de Goldbach la idea inicial es la de ir seleccionando números pares para buscarles su descomposición de suma de dos primos. Podríamos cambiar la perspectiva: engendrar todas las sumas de dos primos en un rango y cotejar con una lista de números pares para ver si alguno de ellos es resultado de esa suma. En ese caso, como venimos haciendo, le borraríamos el símbolo que le acompañe.
Así que comenzamos con una lista de pares que comience en 4:
Después engendramos todas las sumas de dos primos impares con rango 200. Para ello creamos la macro Goldbach, cuyo código se ofrece más abajo, y al ejecutarla, ¡zas!, todas las caritas desaparecen y queda comprobada la conjetura.
Código de la macro goldbach
sub goldbach
dim i,j,k, rango,p,q
rango=200
for i=3 to rango
if esprimo(i)=1 then
for j=1 to i
if esprimo(j)=1 then
a=i+j
p=int(a/40)
q=a-p*40
StarDesktop.CurrentComponent.sheets(2).GetCellByPosition(3+2*p,2+q/2).string=" "
end if
next j
end if
next i
end sub
2 comentarios:
Solo queria decir y hacer publicidad a mi blog ya que necesito un poco de appyo en el hablo de las inquietudes del mundo que nos rodea actualmente, Gracias y Perdón por las molestias.
http://elblogdeunjoven.blogspot.com/
Sigueme Por Favor Gracias de nuevo¡
Yo he creado una modificacion de la criba que es varios millones de veces mas rapida que esta, hace parecer a cualguier lenguaje en un lenguaje C, pero tengo un problema, como calculo los numeros extremadamente grandes y esto y el espacio en disco, si guardo en una base de datos los discos de Yeras se vuelven pequeños. Un numero de un n millon de digitos es un mega. Mil de ellos un gigabye. Un millon un terabyte, es decir si se almacenara como ascii, se pdria almacenar mas o como bit, pero dificultaria mucho los calculos y hacerlo mas lento.
Publicar un comentario