這個問題在這里已經有了答案: Python 中正整數的位長 7 個答案 昨天關門。
我正在尋找一種使用 Python 確定二進制表示中整數長度的快速方法。在 C 中,可以考慮uint64_t(log2(x) 1.0).
讓我們以以下演算法為例,該演算法計算余數為 17 模 24 的數字:
def count17mod24(s:int, max_bin_len:int)->int:
x=0
q = queue.Queue()
q.put(s)
while not q.empty():
n = q.get()
if n%3 == 2:
q.put((2*n-1)//3)
if n % 24 == 17:
x = 1
if len(np.binary_repr(n)) < len(np.binary_repr(s)) max_bin_len-1:
q.put(4*n 1)
elif n%3 == 0:
if len(np.binary_repr(n)) < len(np.binary_repr(s)) max_bin_len-1:
q.put(4*n 1)
elif n%3 == 1:
if len(np.binary_repr(n)) < len(np.binary_repr(s)) max_bin_len and n>1:
q.put((4*n-1)//3)
if len(np.binary_repr(n)) < len(np.binary_repr(s)) max_bin_len-1:
q.put(4*n 1)
return x
那些對基礎數學問題感興趣的人可能想看看這個MSE 帖子。我想一步一步地進一步優化演算法,我相信位的計數絕對是一個可能的行動點。目前我正在使用np.binary_repr(n),然后通過len(...).
可能還有許多其他對性能至關重要的用例可用于確定整數的二進制長度。如果有任何想法可以加快速度,我將不勝感激。也許有一些使用 log2 或類似技巧的方法?
uj5u.com熱心網友回復:
內置的 Python int 型別有一個方法 bit_length,這可能是最快的方法。
a = 3
print(a.bit_length())
Output: 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420782.html
標籤:
