pub fn gcd(mut a : usize, mut b : usize) -> usize {
let mut t;
loop {
if b == 0 { return a }
t = b;
b = a % b;
a = t;
}
}
pub fn gcd3(a : usize, b : usize, c: usize) -> usize {
gcd(a, gcd(b,c))
}
pub fn gcd4(a : usize, b : usize, c: usize, d : usize) -> usize {
gcd(gcd(a,b), gcd(c,d))
}
pub fn lcm(a : usize, b : usize) -> usize {
(a / gcd(a,b)) * b
}
pub fn lcm3(a : usize, b : usize, c: usize) -> usize {
lcm( lcm(a,b), c)
}
pub fn lcm4(a : usize, b : usize, c: usize, d : usize) -> usize {
lcm( lcm(a,b), lcm(c,d) )
}