什么是C++ __builtin_popcount()函数
一、__builtin_popcount()的作用
__builtin_popcount()是 GCC 编译器的内置函数。它可以返回输入数据中,无符号二进制中‘1’的个数。
二、使用场景:
使用一个二进制数字表示一个集合的时候,枚举一个组合(子集),需要判断这个数字里面的 1 的个数是不是和子集的大小相等。
三、应用
LeetCode 762. 二进制表示中质数个计算置位
给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。计算置位位数 就是二进制表示中 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 |
什么是C++ __builtin_popcount()函数相关推荐
- C/C++: __builtin_popcount 函数及其一些 __builtin函数
__builtin_popcount函数 __builtin_popcount()用于计算一个 32 位无符号整数有多少个位为1 GCC有一个叫做__builtin_popcount的内建函数,它可以 ...
- CodeForces - 993C Careful Maneuvering(几何+暴力+状态压缩)
题目链接:点击查看 题目大意:在 x = -100 的直线上有 n 个敌方飞船,在 x = 100 的直线上有 m 个敌方飞船,现在在 x = 0 的直线上可以选择两个点作为诱饵,使得两侧的飞船瞄准射 ...
- 解9*9数独算法(C++)
什么是数独 数独(shù dú)是源自18世纪瑞士的一种数学游戏.是一种运用纸.笔进行演算的逻辑游戏.已知有9行9列的格子,且被分成9个3*3的方块.其中一些格子内有数字,数值的范围为1-9 .玩家需 ...
- 一些问题的答案记录 (持续更新中)
前言: 博士期间会不断的学习和查阅在线资料, 甚至有时候能发现一些特别出彩的小问题及其答案. 与其花时间记住全部的答案, 不如将他们记录下来,以便后期查阅, 故写此文. 问题集: 如何清空CPU Ca ...
- 奇妙糖果屋 【二进制+异或】
奇妙糖果屋 Time Limit : 3000/1000ms (Java/Other) MemoryLimit : 65535/32768K (Java/Other) Total Submissi ...
- C语言popcount函数,C/C++中__builtin_popcount()的使用及原理
__builtin_popcount()用于计算一个 32 位无符号整数有多少个位为1 Counting out the bits 可以很容易的判断一个数是不是2的幂次:清除最低的1位(见上面)并且检 ...
- C/C++中__builtin_popcount()的使用及原理
__builtin_popcount()用于计算一个 32 位无符号整数有多少个位为1 Counting out the bits 可以很容易的判断一个数是不是2的幂次:清除最低的1位(见上面 ...
- 欧拉函数的一道练习题(附加容斥做法)
jzd同学今天告诉了我们一道关于欧拉函数的题,一开始觉得毫无头绪,当身旁的erge同学切完开始装(xiao)逼(zhang)的时候,他无意间透露的欧拉函数四个字启发了我,最近做了一道很相似的题HDU1 ...
- c语言中的循环移位函数,C ++中循环移位(旋转)操作的最佳实践
另请参阅另一个旋转问题的此答案的早期版本,其中包含有关asm gcc / clang为x86生成的更多详细信息. 在C和C ++中表达旋转的最容易编译的方法是避免任何未定义的行为,这似乎是John R ...
最新文章
- python的0基础入门语法_学习小结(1)
- docker学习笔记18:Dockerfile 指令 VOLUME 介绍
- JS实现下一天的显示
- Linux下安装DB2_v9.7详细教程
- 十大排序算法——选择排序法
- windows 不安装jdk 运行 jar_详解Windows系统安装运行Mongodb服务(推荐)
- GitHub 爬虫项目
- android opengl滤镜,Android OpenGL ES滤镜开发之美颜效果
- 《大数据之路-阿里巴巴大数据实践》第十六章 数据应用
- 机器学习模型训练全流程!
- 解读 AppStore 新功能:自定义产品页面和 A/B Test 工具
- 【Word文稿】在Word中优雅地插入VScode颜色主题代码(高亮、背景、颜色、字体均完美)
- 火车票能不能选座_电话订火车票可以自己选座位吗
- 「Go工具箱」web中想做到cookie值安全?securecookie库的使用和实现原理
- Windows11 系统打开IE浏览器的方式(完整版)
- linux计划任务1
- 框架技术----Spring介绍
- 2021年2月22日 星期一 农历八九 晴
- MySQL的事务总结(事务特性,隔离级别,脏读,不可重复读,幻读,常见问题)
- Android权限申请哪些需要动态申请