1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
use crate::math::gcd;

pub trait WithGcd {
    fn gcd(&self) -> u64;
}

impl WithGcd for Vec<u64> {
    fn gcd(&self) -> u64 {
        self.iter().fold(0, |acc, &c| gcd(acc, c))
    }
}

impl WithGcd for Vec<i64> {
    fn gcd(&self) -> u64 {
        self.iter().fold(0, |acc, &c| gcd(acc, c.abs() as u64))
    }
}