wiki-prime-numbers.rs
1.1 kB · rust · 35 lines
1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board, Grid, Ramp};3use mrlynum::prime::Sieve;45const LIMIT: usize = 100;6const SIDE: usize = 10;78fn main() -> Result<()> {9 let mut board = Board::square();10 let area = board.frame(0.08);11 let mut sieve = Sieve::new(LIMIT);12 sieve.finish();13 assert_eq!(sieve.count(), 25);14 assert_eq!(sieve.rank(), 4);15 let types = sieve.types();16 let struck = (2..=LIMIT).filter(|&n| types[n] > 1).count();17 assert_eq!(struck, 74);18 let top = *types.iter().max().expect("the sieve is not empty");19 assert_eq!(top, 5);20 let ramp = Ramp::tone(ink::dim(), ink::orange());21 let grid = Grid::new(area, SIDE, SIDE, 0.10);22 for row in 0..SIDE {23 for col in 0..SIDE {24 let number = row * SIDE + col + 1;25 let tone = match types[number] {26 0 => continue,27 1 => ink::yellow(),28 mark => ramp.at((mark - 2) as f64 / (top - 2) as f64),29 };30 grid.fill(&mut board, col, row, tone);31 }32 }33 save("wiki-prime-numbers", &board)?;34 Ok(())35}