Вы не можете сделать это вычислительно менее сложным. Это будет O (n) количество бит или, как показал ответ с помощью трюка, O (n) количество бит, установленное в 1; но если все числа, которые вы используете, не являются особым случаем, последний в среднем должен быть n / 2, поэтому оба этих числа O (n) одинаковы.
И трюк с таблицей подстановок, конечно же, фактически ничего не делает для сложности вычислений; это просто платит за время с пространством, но не изменяя основную экономику, которая заключается в том, что вы должны проверять каждый бит один раз как-то , и нет никакого способа обойти это. Вы не можете логически ответить на вопрос о битах в числе, не осмотрев каждый из них.
Теперь, я предполагаю, что я немного небрежен, поскольку многие из этих примеров на самом деле O (n ^ 2), так как в Python вы должны исследовать все число одновременно, так что с длинным целым числом Python, скажем, скажем, , 100 байтов, операция + или & или / / будет проверять каждый байт как минимум один раз, и это будет происходить снова и снова, пока число не уменьшится до нуля (в схемах, описанных выше), так что они, опять же, действительно O (n ^ 2) операций. Я не уверен, что Python допустит истинное решение O (n) здесь.
В любом случае: если вы действительно спрашивали о вычислительной сложности, что, в частности, означает анализ больших чисел, это ваш ответ. : -)