wiki-farey-sequence.rs
1.0 kB · rust · 34 lines
1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board};3use mrlynum::factor::gcd;45const ORDER: usize = 8;67fn main() -> Result<()> {8 let mut board = Board::square();9 let frame = board.frame(0.08);10 let step = frame.h / ORDER as f64;11 let radius = step * 0.06;12 let mut total = 0usize;13 let mut fresh = 0usize;14 for q in 1..=ORDER {15 let y = frame.y + (q as f64 - 0.5) * step;16 board.segment((frame.x, y), (frame.x + frame.w, y), 1.5, ink::line());17 for b in 1..=q {18 for a in 0..=b {19 if gcd(a, b) != 1 {20 continue;21 }22 let x = frame.x + frame.w * a as f64 / b as f64;23 let new = b == q;24 board.disc(x, y, radius, if new { ink::yellow() } else { ink::blue() });25 total += 1;26 fresh += new as usize;27 }28 }29 }30 assert_eq!(total, 83);31 assert_eq!(fresh, 23);32 save("wiki-farey-sequence", &board)?;33 Ok(())34}