Почему не итеративно делить на 2?
count = 0 while n > 0 if (n % 2) == 1 count += 1 n /= 2
Я согласен, что это не самый быстрый, но «лучший» несколько неоднозначен. Я бы сказал, что «лучший» должен иметь элемент ясности