// Synopsis: // // $ rustc gcd.rs -o gcd-rs // $ ./gcd-rs 11 22 33 121 // 11 // use std::{cmp, env, ops}; fn gcd2(mut a: T, mut b: T) -> T where T: cmp::PartialEq + Copy + ops::Rem + ops::Neg, { while b != -b { let c = b; b = a % b; a = c; } a } fn gcdn(nums: impl IntoIterator) -> Option where T: cmp::PartialEq + Copy + ops::Rem + ops::Neg, { nums.into_iter().reduce(gcd2) } fn main() { let nums = env::args().skip(1).map(|s| s.parse::().unwrap()); if let Some(gcd) = gcdn(nums) { println!("{gcd}"); } }