use crate::primes;
pub struct MassField {
pub range_start: u64,
pub range_end: u64,
}
impl MassField {
pub fn new(range_start: u64, range_end: u64) -> Self {
Self {
range_start,
range_end,
}
}
pub fn generate_mass_map(&self) -> Vec<(u64, u64)> {
let mut map = Vec::new();
let mut p = primes::next_prime(self.range_start.saturating_sub(1));
while p < self.range_end {
let p_next = primes::next_prime(p);
if p_next > self.range_end {
break;
}
let mass = (p + 1..p_next)
.filter(|&n| !primes::is_prime(n))
.map(primes::prime_factor_mass)
.sum();
map.push((p, mass));
p = p_next;
}
map
}
}