Оптимизация производительности набора битов для подсчета количества установленных битов для диапазона значений

У меня есть следующий фрагмент кода, который принимает 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;
}

0 ответов

Другие вопросы по тегам