当前位置: 代码迷 >> 综合 >> 领扣LintCode算法问题答案-1046. 二进制表示中质数个计算置位
  详细解决方案

领扣LintCode算法问题答案-1046. 二进制表示中质数个计算置位

热度:80   发布时间:2024-02-23 08:36:38.0

领扣LintCode算法问题答案-1046. 二进制表示中质数个计算置位

目录

  • 1046. 二进制表示中质数个计算置位
    • 描述
    • 样例 1:
    • 样例 2:
  • 题解
  • 鸣谢

1046. 二进制表示中质数个计算置位

描述

给定两个整数 L 和 R ,找到闭区间[L, R] 范围内,计算置位位数为质数的整数个数。

(注意,计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有,1 不是质数。)

  1. L, R 是 L <= R 且在[1, 10^6] 中的整数。
  2. 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;}
}

原题链接点这里

鸣谢

非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。