Rust Count Non Divisible
fn count_non_divisible(a: &[i64]) -> Vec<i64> {
let size = a.len();
let max_val = *a.iter().max().unwrap() as usize;
let mut occurrences = vec![0i64; max_val + 1];
for &v in a {
occurrences[v as usize] += 1;
}
let mut nondivisor = vec![0i64; size];
for (k, &v) in a.iter().enumerate() {
let mut count = 0;
let mut i = 1i64;
while i * i <= v {
if v % i == 0 {
count += occurrences[i as usize];
if v / i != i {
count += occurrences[(v / i) as usize];
}
}
i += 1;
}
nondivisor[k] = size as i64 - count;
}
nondivisor
}
This counts how often each value appears, then subtracts the divisor matches so you get the non-divisible count for each item.