Bash Count Non Divisible
count_non_divisible() {
local -n _a="$1"
local -n _out="$2"
local _size=${#_a[@]}
local _maxv=${_a[0]} _v
for _v in "${_a[@]}"; do (( _v > _maxv )) && _maxv=$_v; done
local -a _occ
for ((_v = 0; _v <= _maxv; _v++)); do _occ[_v]=0; done
for _v in "${_a[@]}"; do _occ[_v]=$(( _occ[_v] + 1 )); done
_out=()
local _k
for _k in "${!_a[@]}"; do
_v=${_a[$_k]}
local _count=0 _i=1
while (( _i * _i <= _v )); do
if (( _v % _i == 0 )); then
_count=$(( _count + _occ[_i] ))
if (( _v / _i != _i )); then
_count=$(( _count + _occ[_v/_i] ))
fi
fi
((_i++))
done
_out[_k]=$(( _size - _count ))
done
}
This counts how often each value appears, then subtracts the divisor matches so you get the non-divisible count for each item.