Оптимизация производительности набора битов для подсчета количества установленных битов для диапазона значений
У меня есть следующий фрагмент кода, который принимает 2 целочисленных значения, которые устанавливают мой диапазон [left, right]
, Я конвертирую целые числа в их двоичное представление, а затем подсчитываю количество бит, установленных с помощью std::count
, Мой метод работает, однако я столкнулся с проблемой производительности. Это занимает слишком много времени для завершения, так что в идеале я хочу сделать это менее чем за 12000 мс, что я уже закончил. Любые идеи о том, как я могу оптимизировать эту операцию или мне нужно подходить к этому по-другому, не используя std::bitset
?
Изменить: я не знаю, каковы целочисленные значения, но я знаю, что они не больше, чем 64-битные.
long long countOnes ( int left, int right )
{
long long oneCount = 0;
for(int i = left; i <= right; i++)
{
std::bitset<64> b1 (i);
oneCount += b1.count();
}
return oneCount;
}