use crate::primes;
use std::collections::HashMap;
#[derive(Debug)]
pub struct CompositeInfluence {
pub composite_masses: HashMap<u64, f64>,
}
impl CompositeInfluence {
pub fn new(range_start: u64, range_end: u64) -> Self {
let composite_masses = (range_start..=range_end)
.filter(|&n| !primes::is_prime(n))
.map(|n| (n, primes::prime_factor_mass(n) as f64))
.collect();
Self { composite_masses }
}
pub fn influence_at_point(&self, point: f64) -> f64 {
self.composite_masses
.iter()
.map(|(&composite, &mass)| {
let dist_sq = (point - composite as f64).powi(2);
mass / dist_sq.max(1.0) })
.sum()
}
}