当前位置: 面试刷题>> 二进制表示中质数个计算置位 (经典算法题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 示例代码
```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 示例代码
```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 示例代码
```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
```
**码小课网站中有更多相关内容分享给大家学习**,欢迎访问码小课网站深入学习更多算法和数据结构知识。