// codesnip-guard: lcm #[cfg_attr(any(),rustfmt::skip)]pub fn lcm(a:u64,b:u64)->u64{if a==0&&b==0{return 0;}a/gcd(a,b)*b} // codesnip-guard: gcd #[cfg_attr(any(),rustfmt::skip)]#[doc=" binary gcd"]pub fn gcd(mut a:u64,mut b:u64)->u64{if a==0{return b;}if b==0{return a;}let u=a.trailing_zeros();let v=b.trailing_zeros();a>>=u;b>>=v;let k=std::cmp::min(u,v);while a!=b{if a>=a.trailing_zeros();}a<