领扣LintCode算法问题答案-1046. 二进制表示中质数个计算置位
目录
- 1046. 二进制表示中质数个计算置位
-
- 描述
- 样例 1:
- 样例 2:
- 题解
- 鸣谢
1046. 二进制表示中质数个计算置位
描述
给定两个整数 L 和 R ,找到闭区间[L, R] 范围内,计算置位位数为质数的整数个数。
(注意,计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有,1 不是质数。)
- L, R 是 L <= R 且在[1, 10^6] 中的整数。
- R - L 的最大值为 10000。
样例 1:
输入: L = 6, R = 10
输出: 4
解释:
6 -> 110 (2 个计算置位,2 是质数)
7 -> 111 (3 个计算置位,3 是质数)
9 -> 1001 (2 个计算置位,2 是质数)
10-> 1010 (2 个计算置位,2 是质数)
样例 2:
输入: L = 10, R = 15
输出: 5
解释:
10 -> 1010 (2 个计算置位, 2 是质数)
11 -> 1011 (3 个计算置位, 3 是质数)
12 -> 1100 (2 个计算置位, 2 是质数)
13 -> 1101 (3 个计算置位, 3 是质数)
14 -> 1110 (3 个计算置位, 3 是质数)
15 -> 1111 (4 个计算置位, 4 不是质数)
题解
public class Solution {
/*** @param L: an integer* @param R: an integer* @return: the count of numbers in the range [L, R] having a prime number of set bits in their binary representation*/public int countPrimeSetBits(int L, int R) {
int ret = 0;for (int i = L; i <= R; i++) {
int count = 0;int n = i;while (n > 0) {
count += n & 1;n >>= 1;}if (this.isPrime(count)) {
ret++;}}return ret;}private boolean isPrime(int n) {
if (n < 2) {
return false;}for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;}}return true;}
}
原题链接点这里
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。