当前位置: 面试刷题>> 二进制表示中质数个计算置位 (经典算法题500道)


完整题目描述

题目:二进制表示中质数个计算置位

给定一个正整数 n,我们需要判断该整数的二进制表示中1的个数是否为质数。如果是质数,则返回 true;否则返回 false

注意

  1. 质数是大于1的自然数,除了1和它本身以外不再有其他因数。
  2. 1不是质数。

示例

  • 输入:n = 15,二进制表示为 1111,其中1的个数为4,4不是质数,输出:false
  • 输入:n = 13,二进制表示为 1101,其中1的个数为3,3是质数,输出:true

PHP 示例代码

function countBits($n) {
    $count = 0;
    while ($n) {
        $count += $n & 1;
        $n >>= 1;
    }
    return $count;
}

function isPrime($num) {
    if ($num <= 1) return false;
    if ($num <= 3) return true;
    if ($num % 2 == 0 || $num % 3 == 0) return false;
    $i = 5;
    while ($i * $i <= $num) {
        if ($num % $i == 0 || $num % ($i + 2) == 0) {
            return false;
        }
        $i += 6;
    }
    return true;
}

function isPrimeNumberOfBits($n) {
    $bitCount = countBits($n);
    return isPrime($bitCount);
}

// 测试
echo isPrimeNumberOfBits(15) ? 'true' : 'false';  // false
echo "\n";
echo isPrimeNumberOfBits(13) ? 'true' : 'false';  // true

Python 示例代码

def count_bits(n):
    count = 0
    while n:
        count += n & 1
        n >>= 1
    return count

def is_prime(num):
    if num <= 1:
        return False
    if num <= 3:
        return True
    if num % 2 == 0 or num % 3 == 0:
        return False
    i = 5
    while i * i <= num:
        if num % i == 0 or num % (i + 2) == 0:
            return False
        i += 6
    return True

def is_prime_number_of_bits(n):
    bit_count = count_bits(n)
    return is_prime(bit_count)

# 测试
print(is_prime_number_of_bits(15))  # False
print(is_prime_number_of_bits(13))  # True

JavaScript 示例代码

function countBits(n) {
    let count = 0;
    while (n) {
        count += n & 1;
        n >>= 1;
    }
    return count;
}

function isPrime(num) {
    if (num <= 1) return false;
    if (num <= 3) return true;
    if (num % 2 === 0 || num % 3 === 0) return false;
    for (let i = 5; i * i <= num; i += 6) {
        if (num % i === 0 || num % (i + 2) === 0) return false;
    }
    return true;
}

function isPrimeNumberOfBits(n) {
    const bitCount = countBits(n);
    return isPrime(bitCount);
}

// 测试
console.log(isPrimeNumberOfBits(15));  // false
console.log(isPrimeNumberOfBits(13));  // true

码小课网站中有更多相关内容分享给大家学习,欢迎访问码小课网站深入学习更多算法和数据结构知识。

推荐面试题