domingo, 1 de marzo de 2015

El desfile de los primos

(es) El desfile de los primos

(eo) Primoparado

El desfile de los primos

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

Descripción artística:

Los números primos desfilando al rededor del número uno.

Motivación:

Una lectura sobre la Esprial de Ullam y sus curiosidades.

Descripción técnica:

Es una espiral cuadrada de cien vueltas con los números primos resaltados. El numero uno se ha marcado con rojo.
Esta construcción se conoce como la Espiral de Ullam.

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 -s 8000 ullam.cfdg ullam.png

startshape espiral

NUMREVOLUCIONES = 100
LIMITE = 2*NUMREVOLUCIONES
TAM = 1

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)))

#1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 ...
desplazamientoH1(av,i) = 
 if(mod(av,2)==0,
  av/2-i,
  -(av-1)/2+i
 )
desplazamientoV1(av) = 
 if(mod(av,2)==0,
  av/2,
  -(av-1)/2
 )
desplazamientoH2(av) = 
 if(mod(av,2)==0,
  -av/2,
  (av+1)/2
 )
desplazamientoV2(av,i) = 
 if(mod(av,2)==0,
  av/2-i,
  -(av-1)/2+i
 )
shape espiral {
 loop avances = LIMITE []  {
  despy = desplazamientoV1(avances)
  loop i = avances [] {
   despx = desplazamientoH1(avances,i)
   SQUARE[x despx y despy s TAM b if(esPrimo(avances^2-(avances-(i+1))), 0, 1)]
  }
  despx = desplazamientoH2(avances)
  loop i = avances [] {
   despy = desplazamientoV2(avances,i)
   SQUARE[x despx y despy s TAM  b if(esPrimo(avances^2+i+1), 0, 1)]
  }
 }
 SQUARE[x 0 y 0 b 1 h 0 sat 1] #El número uno en rojo
}

No hay comentarios:

Publicar un comentario