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}