in reply to Golf: overtone calculator

Not a very golfable task. It is practically chosen such that the algorithm cannot be varied, and picking a better algorithm is what golf is really about. Not surprisingly my best entry is a variation on the initial attempt. Alternative approaches were only longer.
# 1 2 3 4 5 6 7 + 8 #234567890123456789012345678901234567890123456789012345678901234567890 +1234567890 for$a(1..pop){@_{map{sprintf"%.3f",$_[0]*$a/$_}1..$a}++}sort{$a<=>$b}k +eys%_ grep!$_{$_}++,sort{$a<=>$b}map{$a=$_;map{sprintf"%.3f",$_[0]*$a/$_}1.. +$_}1..pop my%y=map{$_=>[1..$_]}1..pop;@_{map{sprintf"%.3f",$_[0]*$a/$_}@$b}++whi +le($a,$b)=each%y;sort{$a<=>$b}keys%_

Makeshifts last the longest.