题目
给你两个整数 left
和 right
,在闭区间 [left, right]
范围内,统计并返回 计算置位位数为质数 的整数个数。
计算置位位数 就是二进制表示中 1
的个数。
- 例如,
21
的二进制表示10101
有3
个计算置位。
示例1:
1 | 输入: L = 6, R = 10 |
示例2:
1 | 输入: L = 10, R = 15 |
提示:
1 <= left <= right <= 106
0 <= right - left <= 104
解法
解法一:
10^6是小于2^20次方的,那就意味着问题可以转换为,在2的20次方之内,找到整数二进制数内数字1总数为质数的总数。
那问题就可以简化为,从L遍历到R,将整数转换为二进制,统计里面的1的个数,然后判断是否是20以内的质数,是总数加1,最后返回总数即可。
Java
1 | public int countPrimeSetBits(int L, int R) { |