dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
use crate::find_a_prime_factor_pollard_rho_brent::find_prime_factor_pollard_rho;

pub fn prime_factorize_flat_pollard_rho_2<F>(
    is_prime: &F,
    mut n: u64,
) -> Result<Vec<u64>, &'static str>
where
    F: Fn(u64) -> bool,
{
    let mut res = vec![];

    let ctz = n.trailing_zeros();

    res.extend(vec![2; ctz as usize]);

    n >>= ctz;

    for i in 3..100 {
        while n % i == 0 {
            n /= i;

            res.push(i);
        }

        if n == 1 {
            break;
        }
    }

    while n > 1 {
        let p = find_prime_factor_pollard_rho(is_prime, n, 1 << 7)?;

        while n % p == 0 {
            n /= p;

            res.push(p);
        }
    }

    Ok(res)
}

#[cfg(test)]

mod tests {

    #[test]

    fn test() {}
}