miércoles, 25 de febrero de 2015

El baile de los primos

(es) El baile de los primos

(eo) Primobalo

El baile de los primos

http://dx.doi.org/10.13140/RG.2.2.34092.90243

Descripción artística:

Los números primos danzando junto con los números compuestos al rededor del número uno.

Motivación:

Una lectura sobre la Esprial de Sacks y sus curiosidades.

Descripción técnica:

Es una espiral polar de la forma ( r( ρ ), θ ( ρ ) ) , con θ = ρ , y r= ρ , con 1 ρ 10000 , ρ N y θ medido en revoluciones. Para cada ρ se dibujó un círculo de color negro si es primo y griz si es compuesto.
Esta construcción se conoce como la Espiral de Sacks.

Alineaciones libres de números primos:

  • Semirrecta horizontal derecha: cuadrados perfectos.
  • Línea inmediatamente inferior a la anterior: números de la forma n 2 -1 , divisibles siempre por n+1 y n-1 .
  • Semirrecta horizontal izquierda: números de la forma n 2 +n , divisibles siempre por n y n+1 .

Curvas aparentemente densas en números primos:

  • Una espiral que, en la ilustración, termina cerca de la parte inferior del disco: números de la forma n 2 +n+41 , el polinomio descubierto por Euler.
  • Otra espiral situada varios lugares por encima de la anterior: números de la forma n 2 +n+17 .
  • Línea inmediatamente superior a la semirrecta horizontal izquierda: números de la forma n 2 +n-1 .
Archivos

 Código (CFDG):

# Copyright 2015 Eduardo Adam Navas López
# Este archivo es Software Libre liberado bajo la licencia GNU GPLv3 o su versión más reciente:
# http://www.gnu.org/licenses/gpl.html

#Para generar la imagen:
#$ cfdg -b 0 -s 8000 sacks.cfdg sacks.png

CF::Size = [s 202 202]

startshape espiral

NUMREVOLUCIONES = 100
LIMITE = NUMREVOLUCIONES*NUMREVOLUCIONES
VUELTA = 360

esPrimo_aux(n, i, lim) =
 if(i <= lim,
  if(mod(n,i),
   esPrimo_aux(n, i+1, lim),
   0),
  1)

esPrimo(numero) = esPrimo_aux(numero, 2, floor(sqrt(numero)))

shape espiral {
 curva[]
 loop i = LIMITE []  {
  n = i+1
  ang = VUELTA * sqrt(n)
  rad = sqrt(n)
  CIRCLE[x (rad * cos(ang)) y (rad * sin(ang)) 
   b if(esPrimo(n), 0, 0.75)]
 }
 CIRCLE[x 0 y 0 b 1 h 0 sat 1 s 0.5]

 loop i = LIMITE []  {
  n = i+LIMITE
  ang = VUELTA * sqrt(n)
  rad = sqrt(n)
  CIRCLE[x (rad * cos(ang)) y (rad * sin(ang)) 
   b if(esPrimo(n), 0, 0.75)]
 }
}

path curva{
 MOVETO(0,0)
 loop i = LIMITE []  {
  n = i+1
  ang = VUELTA * sqrt(n)
  rad = sqrt(n)
  LINETO((rad * cos(ang)), (rad * sin(ang)) )
 }
 STROKE(0.05)[]
 #STROKE()[]
}

No hay comentarios:

Publicar un comentario