KB Sriram construyó una criba numérica electrónica que recrea un proyecto de 1982 con microcontroladores modernos. El principio es simple. Se descartan los candidatos imposibles para una ecuación cuadrática usando aritmética modular con primos pequeños. Treinta chips ATtiny412, uno por módulo, filtran los números, y una Raspberry Pi Pico les marca el reloj y verifica a los que sobreviven.

La idea de filtrar números con hardware es mucho más antigua que el software. La primera criba numérica, construida en 1928 por el matemático D. H. Lehmer, usaba 19 cadenas de bicicleta montadas sobre un eje común. La versión moderna supera por unas 100 veces a la criba de engranajes de 1932.

¿Cómo funciona la criba con treinta ATtiny412?

Cada ATtiny412 se encarga de un solo módulo y guarda en memoria un patrón repetitivo de aceptar o rechazar. Todos los chips comparten una línea de drenador abierto. Cualquier chip que rechace la baja a nivel bajo, así que la línea queda en alto solo cuando ninguno rechazó. La Raspberry Pi Pico genera el reloj común y hace avanzar a la vez a los treinta microcontroladores por sus patrones.

La Pico corre la prueba matemática, mucho más lenta, solo cuando todos los microcontroladores se quedan callados. El sistema pasa casi todo su tiempo rechazando números rápido en vez de calcularlos. A toda velocidad, el hardware evalúa unos 500.000 candidatos por segundo.

  • Cada ATtiny412 maneja un solo módulo primo.
  • Los chips comparten una línea de drenador abierto para el rechazo.
  • La Raspberry Pi Pico genera el reloj común.
  • La prueba matemática lenta corre solo sobre los sobrevivientes.
  • Los módulos se cargan por I2C.

Las versiones, el firmware y las cifras medidas

El firmware de los ATtiny412 está escrito en C y se compila con avr-gcc, en la carpeta avr/ de cada versión. El código anfitrión para la Pico vive en la carpeta rpi/.

La versión 01 usa CircuitPython y resuelve la ecuación y² − 2x² = 4001, con tres módulos fijos en el código. Avanza con un botón y tiene un zumbador conectado a la línea común.

La versión 02 pasa a MicroPython, carga los módulos por I2C y les marca el reloj a 50 kHz desde el PIO de la Pico. Con esta versión, la criba factorizó el número 5.283.065.753.709.209. La versión 04 califica los módulos antes de enviarlos, con una imagen de diagnóstico y una revisión de los pines de conexión desde la Pico.

La versión 05 monta treinta placas en un backplane de placa perforada en tiras, ejecuta una autoverificación por I2C antes de cada corrida y mide los tiempos entre la petición (REQ) y el voto (VOTE) con las treinta instaladas. La versión 06 mantiene el mismo backplane y suma las comparaciones históricas con las cadenas de bicicleta de 1928, la máquina de engranajes de 1932 y la DLS-127 de 1970, hasta llegar a 500 kHz. Los treinta ATtiny412 reciben reloj de hasta 500 kHz.

¿Qué se necesita para replicarla?

El repositorio de KB Sriram reúne el código de todas las versiones, con el firmware para avr-gcc y el código anfitrión de la Pico. Una placa de desarrollo con RP2040 puede cumplir el papel de la Pico, ya que comparte el mismo microcontrolador de doble núcleo. Para el montaje en placa perforada hacen falta los treinta ATtiny412 y el backplane.

En 2001, Daniel J. Bernstein describió un algoritmo que genera directamente a los candidatos sobrevivientes. La criba original de 1982 usaba bancos de ROM y contadores para rechazar candidatos. La misma arquitectura, un filtro rápido seguido de una verificación lenta, lleva décadas en uso.

Fuente del proyecto en github.com/kbsriram/a-tiny-sieve.