sub divides1 { my($d, $n) = @_; $d < $n ? $d & 1 ? $n & 1 ? divides($d, $n - $d) : divides($d, $n >> 1) : $n & 1 ? 0 : divides($d >> 1, $n >> 1) : $d == $n; } sub divides { 0 == $_[1] || divides1(abs $_[0], abs $_[1]) }