__builtin_popcount()是 GCC 編譯器的內置函數。它可以返回輸入數據中,無符號二進制中‘1’的個數。
使用一個二進制數字表示一個集合的時候,枚舉一個組合(子集),需要判斷這個數字里面的 1 的個數是不是和子集的大小相等。
三、應用LeetCode 762. 二進制表示中質數個計算置位
給你兩個整數 left 和 right ,在閉區(qū)間 [left, right] 范圍內,統(tǒng)計并返回 計算置位位數為質數 的整數個數。計算置位位數 就是二進制表示中 1 的個數。
例如, 21 的二進制表示 10101 有 3 個計算置位。
示例 1:
輸入:left = 6, right = 10
輸出:4
解釋:
6 ->110 (2 個計算置位,2 是質數)
7 ->111 (3 個計算置位,3 是質數)
9 ->1001 (2 個計算置位,2 是質數)
10->1010 (2 個計算置位,2 是質數)
共計 4 個計算置位為質數的數字。
AC1:
class Solution {public:
int countPrimeSetBits(int left, int right) {int ans = 0;
for (int x = left; x<= right; ++x) {if ((1<< __builtin_popcount(x)) & 665772) {++ans;
}
}
return ans;
}
};
AC2:
class Solution {public:
int countPrimeSetBits(int L, int R) {int res=0;
for(int i=L;i<=R;i++)
res+=(665772>>__builtin_popcount(i))&1 ;
return res;
}
};
說明:665772 的二進制表示如下
位數 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
665772 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
當前文章:什么是C++-創(chuàng)新互聯(lián)
本文地址:http://www.chinadenli.net/article44/ccpghe.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、品牌網站設計、網站排名、網站設計公司、關鍵詞優(yōu)化、App設計
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)