wiki-mobius-function.rs
1.1 kB · rust · 38 lines
1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board, Grid};3use mrlynum::factor::{mobius, mobius_sieve};45const TOP: usize = 100;6const SIDE: usize = 10;78fn main() -> Result<()> {9 let mut board = Board::square();10 let area = board.frame(0.08);11 let mu = mobius_sieve(TOP);12 let grid = Grid::new(area, SIDE, SIDE, 0.10);13 let (mut plus, mut minus, mut flat) = (0usize, 0usize, 0usize);14 for row in 0..SIDE {15 for col in 0..SIDE {16 let number = row * SIDE + col + 1;17 assert_eq!(mu[number], mobius(number));18 let tone = match mu[number] {19 1 => {20 plus += 1;21 ink::yellow()22 }23 -1 => {24 minus += 1;25 ink::blue()26 }27 _ => {28 flat += 1;29 ink::dim()30 }31 };32 grid.fill(&mut board, col, row, tone);33 }34 }35 assert_eq!((plus, minus, flat), (31, 30, 39));36 save("wiki-mobius-function", &board)?;37 Ok(())38}