これを計算の複雑さを軽減することはできません。これは、O(n)ビット数、または&トリックの答えが示すように、O(n)1に設定されたビット数になります。ただし、使用しているすべての数値が特殊なケースでない限り、後者は平均してn / 2である必要があるため、これらのO(n)数値は両方とも同じです。
もちろん、ルックアップテーブルのトリックは、計算の複雑さに対して実際には何もしていません。それは単にスペースで時間を費やしているだけですが、基礎となる経済学を変えることはありません。つまり、何らかの方法で各ビットを一度調べる必要があり、それを回避する方法はありません。論理的には、各ビットを調べずに、数値のビットに関する質問に答えることはできません。
Pythonでは一度に整数を調べる必要があるため、これらの例の多くは実際にはO(n ^ 2)であるため、少しずさんだと思います。たとえば、Pythonの長整数は100バイトです。 、+または&または/操作は、各バイトを少なくとも1回調べます。これは、数がゼロに減少するまで何度も繰り返されるため(上記のスキームで)、これらも実際にはO( n ^ 2)操作。Pythonがここで真のO(n)ソリューションを許可するかどうかはわかりません。
とにかく:計算の複雑さ、具体的にはビッグO分析を意味するものについて本当に質問しているのであれば、それがあなたの答えです。:-)