La hora se acerca

http://www.daylight.co.nr/

Ya falta menos para que se haga la luz.

Presentación en sociedad de Day Light: Cursed Night

Este domingo aparecerá la primera página del primer capítulo de Cursed Night. El ritmo de actualización será de una página de Cursed Night cada domingo, con ocasionales actualizaciones por la semana que no tengan relación con la historia en sí. De todas formas, el ritmo de actualización no lo puedo garantizar al cien por cien, y es posible que se demore entre capítulo y capítulo.

Mientras tanto, podeis ir mirando lo ya publicado aquí: http://www.daylight.co.nr

Espero vuestras visitas ^^.

Oh. My. God. ¡Soy un sitio!

El video se titula: Fiesta en Xitoshi

xD

Y aquí en google maps.

El mundo es un pañuelo.

Proyectos que avanzan

Por un lado, Cursed Night ya ha avanzado un poco. Bastante poco, pero ha avanzado.

Y por otro lado, la lista de números primos cuenta ya con más de 10 millones de números. Dentro de poco serán publicados en 100 cómodas listas de 1 Mb cada una. NOTA: NO se garantiza que sean números primos. En principio debería serlo, puesto que no se ha detectado ninguna anomalía en la lista demasiado grande; pero basta con que falte uno para que gran parte del trabajo se haya ido al garete.

Permanezcan a la espera ^^.

Sencillo algoritmo de cálculo de números primos

Se dice que el método más efectivo, pero mas lento, es el llamado “la cuenta de la vieja“. Básicamente, consiste en no usar atajos, sino usar la definición. Por ejemplo, 23 es 2*2*2, que viene siendo 2+2+2+2.

Para números grandes es muy costoso, porque como es obvio, tardaríamos mucho. Pero gracias a los ordenadores, que son capaces de hacer cantidades ingentes de operaciones, el trabajo es muy rápido.

Para la calculación de números primos, el método de la vieja sería el de la definición de número primo:

El conjunto de los números primos es un subconjunto de los números naturales que engloba a todos los elementos de este conjunto mayores que 1 que son divisibles únicamente por sí mismos y por la unidad.

Wikipedia.org

Es fácil: Dividimos un número entre todos los primos conocidos que sean menores que él (sin contar al uno como primo). Si el resultado de todas las operaciones deja resto (si operamos con números enteros, si operamos con reales sería si la operación deja decimales), entonces ese número es primo.

Como dividirlo entre todos los números primos es una exageración, estableceremos un límite en sqrt(n) (raiz cuadrada de n), siendo n el número que queremos comprobar.

Se escoge sqrt(n) debido a que todos los números que dividen a n se encuentran en dos mitades, los menores que sqrt(n) y los mayores. Los que son mayores que sqrt(n) son el resultado de dividir n entre un número menor que sqrt(n). La demostración matemática de esto, sencillamente, no la recuerdo :P.

Otra forma de optimizar el proceso es limitar la comprobación a los números impares, y obviando la comprobación de que sea divisible entre 2. Así nos ahorramos dividir un número par entre 2, que ya sabemos que nos va a dar un número no primo y dividir un número impar entre 2, ya que sabemos que 2 no divide números impares.

Puede parecer una chorrada, pero cualquier ahorro es un gran ahorro, porque se repetirá durante mucho tiempo.

El algoritmo, en pseudocódigo, sería entonces:

Variables:

  • lista : Lista de todos los números primos.
  • n: número que queremos comprobar si es primo o no.
  • primo: Número primo que comprobaremos si divide a n.
  • limite: sqrt(n), sólo se comprueban los números primos menores o iguales a este número.
  • es_primo: Variable booleana de control. Indica si un número es primo o no. Se inicializa a VERDADERO.

Programa:

1. Inicializamos n {Nota: Si sólo queremos comprobar ese número, no puede ser mayor que el mayor primo almacenado al cuadrado, si queremos hacer una lista de primos no puede ser mayor que el último primo almacenado}
2. Mientras n < máximo {el número más grande con el que puede operar el lenguaje} hacer

1. {Inicialización de variables:} es_primo=VERDADERO limite=sqrt(n) primo=primer_primo(lista)
2. Mientras (es_primo=VERDADERO) y (primo<=limite) y (lista no ha acabado) hacer

1. Si (entero módulo primo) = 0
2. entonces es_primo=FALSO
3. Sino: primo=siguiente_primo(primo, lista)

3. Fin Mientras
4. Si es_primo=verdadero
5. entonces almacenar_primo(primo, lista)
6. n=n+2 {recordemos que solo comprobamos los números impares}

3. Fin Mientras

Lo probé en Pascal, siendo la lista un archivo de texto (para poder publicarla después en este mismo blog) y comprueba un millón de números en pocos minutos, aunque como es obvio cada vez tardará mas. Ahora mismo, después de 3 horas aproximadamente, ha superado ya el número 37*106. Esa misma lista ocupa unos 20 Mb, así que probablemente la suba a Megaupload o a un sitio de esos.

SPAM

Ayer fue el primer día que me dediqué a promocionar este blog.

Hoy fue el primer día que no recibí ninguna visita.

😥

Edit: Ya vinieron después… ¡Gracias! ¡Os quiero! ¡Comentad malditos!

Edit 2: Vale, 10 visitas, no he dicho nada.

¿Qué pretendes decirme, tele?

Esa fue mi reacción cuando, hace un par de días, vi en las noticias de no-recuerdo-qué canal de televisión una noticia que sinceramente me impactó.

Hablaba sobre la melodía del tono estandar de Nokia, melodía de dominio público al pasar el tiempo necesario para que pasara a ser tal y que es la melodía más reproducida del mundo (¿no te mueres de envidia, Happy Birthday?). La noticia relataba también la tragedia de los herederos del compositor, que no pudieron ver ni un duro de la pasta que eso generaría puesto que la obra era ya de dominio público.

Y así acaba la noticia.

Y bien tele, ¿que pretendías contarme con eso, que no me quedó muy clarito?