naive的方法就是一位一位的統計了,但是通過一個為運算的技巧,我們可以快速的求解這個問題。
(1)不妨假設這個數不超過64位,利用下面代碼for循環裡面的計算,可以并行的求解8個位元組的位數和。
(2)接下來将val分布在8位元組的和加起來 注意這裡采用對半相加的辦法,非常巧妙.最後的結果一定儲存在最低位元組裡面。
(3) 經過測試這個比naive的辦法可能要快了一倍左右。
def count(x):
val =
for i in range():
val += x&
x>>=
val += val>>
val += val>>
val += val>>
print(val&)