use crate::primes;
pub struct CompositeDampener {
pub lower: u64,
pub upper: u64,
pub small_primes: Vec<u64>,
}
impl CompositeDampener {
pub fn new(lower: u64, upper: u64, small_primes: Vec<u64>) -> Self {
Self {
lower,
upper,
small_primes,
}
}
pub fn score(&self) -> f64 {
let composites: Vec<u64> = (self.lower + 1..self.upper)
.filter(|&n| !primes::is_prime(n))
.collect();
if composites.is_empty() {
return 0.0;
}
let hits = composites
.iter()
.filter(|&c| self.small_primes.iter().any(|sp| c % sp == 0))
.count();
hits as f64 / composites.len() as f64
}
}