aboutsummaryrefslogtreecommitdiff
path: root/rust/prime-factors/src/lib.rs
blob: 3d7b41f21b810513a8411ed774895e0c2d38901e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fn factors_aux(mut vec: Vec<u64>, n: u64) -> Vec<u64> {
    match n {
        1 => vec,
        n if n % 2 == 0 => {
            factors_aux({ vec.push(2); vec }, n / 2)
        },
        _ => {
            let mut i: u64 = 3;
            while n % i != 0 { i += 2 }
            factors_aux({ vec.push(i); vec }, n / i)
        }
    }
}

pub fn factors(n: u64) -> Vec<u64> {
    factors_aux(vec![],n)
}