前言 概念: 如果一個數是2的冪,那么它的二進制是這樣的: 2 10 4 100 8 1000 16 10000 也就是第一個是1,其他都是0。 然后-1的話: 1 01 4 11 8 111 16 1111 正文 (num&(num-1))==0 就是了。 解釋 ...
判斷一個數是不是 的幾次冪,最簡單粗暴的做法就是直接迭代除以 ,這里有一個更好的方法,那就是采用位運算。 我們觀察下面屬於 的幾次冪的數的變化規律,用 進制表示。 我們會發現凡是 的幾次冪 除外,用二進制表示第一位全是 ,后面全是 。這個規律好像是這樣但是有什么用呢,不要急,你再看一下比他小一個數的規律就懂了。 發現比他小一個數全是第一位為 后面全為 ,剛剛跟 的幾次冪對應的數相反,這時就可以用位 ...
2018-12-24 13:49 0 2301 推薦指數:
前言 概念: 如果一個數是2的冪,那么它的二進制是這樣的: 2 10 4 100 8 1000 16 10000 也就是第一個是1,其他都是0。 然后-1的話: 1 01 4 11 8 111 16 1111 正文 (num&(num-1))==0 就是了。 解釋 ...
第一種方法 暴力解法 第二種方法 示例分析 以16為例,二進制表示為 16減1為15的二進制表示為 兩者按位與 十進制表示為0,說明是2的N次冪。 擴展-判斷一個數是否是n的N次冪 參考 [算法]快速判斷一個數是否是2的冪次方 ...
利用與(&)運算符 可以快速判斷一個數是否為2的冪次方 將2的冪次方寫成二進制形式后,很容易就會發現有一個特點:二進制中只有一個1,並且1后面跟了N個0, 因此問題可以轉化為判斷1后面是否跟了N個0就可以了。 如果將這個數減去1后會發現,僅有的那個1會變為0,而原來 ...
輸入一個數據,輸出是否為素數 思路:n ->(2,n-1) 能否被整除:看余數 (1) 考慮清楚循環的初始條件 i = 2 flag = true 假設是素數 (2) 循環的結束條件 i <= n-1 (3) 重復需要干什么 判斷能否把n整除 如果被整除 ...
判斷是否是2的次方 將一個2的冪次方數表示成二進制數,發現它是100000...,如果將這個數減一,那個1會變成0,0會變成1 因此這個數與其減一后的數進行與運算結果為0. 最快速的方法: (number & number - 1) == 0 1000 ...
import math def is_prime(number): # 判斷是否為素數 sqrt = int(math.sqrt(number)) for j in range(2, sqrt + 1): # 從2到number的算術平方根迭代 if int ...
...
一、判斷一個數是否為小數 1、有且僅有一個小數點 2、小數點的左邊可能為正數或負數 3、小數點的右邊為正數 二、實現代碼 查看結果: ...