use mrlycore::errors::Result; use mrlyfig::{ink, save, Board, Grid, Ramp}; use mrlynum::prime::Sieve; const LIMIT: usize = 100; const SIDE: usize = 10; fn main() -> Result<()> { let mut board = Board::square(); let area = board.frame(0.08); let mut sieve = Sieve::new(LIMIT); sieve.finish(); assert_eq!(sieve.count(), 25); assert_eq!(sieve.rank(), 4); let types = sieve.types(); let struck = (2..=LIMIT).filter(|&n| types[n] > 1).count(); assert_eq!(struck, 74); let top = *types.iter().max().expect("the sieve is not empty"); assert_eq!(top, 5); let ramp = Ramp::tone(ink::dim(), ink::orange()); let grid = Grid::new(area, SIDE, SIDE, 0.10); for row in 0..SIDE { for col in 0..SIDE { let number = row * SIDE + col + 1; let tone = match types[number] { 0 => continue, 1 => ink::yellow(), mark => ramp.at((mark - 2) as f64 / (top - 2) as f64), }; grid.fill(&mut board, col, row, tone); } } save("wiki-prime-numbers", &board)?; Ok(()) }