haar_lib/math/
continued_fraction.rs

1//! 連分数展開
2
3/// $\frac{a}{b}$を連分数展開する。
4///
5/// `b`が`0`のとき、`None`を返す。
6pub fn continued_fraction(mut a: u64, mut b: u64) -> Option<Vec<u64>> {
7    if b == 0 {
8        return None;
9    }
10
11    let mut ret = vec![];
12    loop {
13        ret.push(a / b);
14        a %= b;
15        if a == 0 {
16            break;
17        }
18        std::mem::swap(&mut a, &mut b);
19    }
20    Some(ret)
21}