Factorisation primitive de rouille avec structure
fn prime_factorization(mut num: i64) -> Vec<PrimeFactor> {
let mut prime_factors: Vec<i64> = Vec::new();
while num % 2 == 0 {
prime_factors.push(2);
num /= 2;
}
for i in 3..(num as f64).sqrt() as i64 + 1 {
while num % i == 0 {
prime_factors.push(i);
num /= i;
}
}
if num > 2 {
prime_factors.push(num);
}
let mut prime_factors_factors: Vec<PrimeFactor> = Vec::new();
for i in 0..prime_factors.len() {
let prime_num = prime_factors[i];
if prime_factors_factors.len() <= 0 {
let prime_factor = PrimeFactor {
num: prime_num,
factor: 1,
};
prime_factors_factors.push(prime_factor);
continue;
}
let mut found = false;
for j in 0..prime_factors_factors.len() {
let mut prime_factor_option = prime_factors_factors.get_mut(j);
match prime_factor_option {
None => {}
Some(ref mut prime_factor) => {
if prime_factor.num == prime_num {
prime_factor.set_factor(prime_factor.factor + 1);
found = true;
}
}
}
}
if !found {
prime_factors_factors.push(PrimeFactor {
num: prime_num,
factor: 1,
})
}
}
prime_factors_factors
}
struct PrimeFactor {
num: i64,
factor: i64,
}
impl PrimeFactor {
fn set_factor(&mut self, factor: i64) {
self.factor = factor;
}
}
Zwazel