zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

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

计算二进制 表示 质数
2023-09-14 09:06:52 时间

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

给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。

计算置位位数 就是二进制表示中 1 的个数。

例如, 21 的二进制表示 10101 有 3 个计算置位。

示例 1:

输入:left = 6, right = 10
输出:4
解释:
6 -> 110 (2 个计算置位,2 是质数)
7 -> 111 (3 个计算置位,3 是质数)
9 -> 1001 (2 个计算置位,2 是质数)
10-> 1010 (2 个计算置位,2 是质数)
共计 4 个计算置位为质数的数字。

示例 2:

输入:left = 10, right = 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 不是质数)
共计 5 个计算置位为质数的数字。

这题使用常规方法去做就可以了,写两个函数就行啦,解题代码如下:

int f(int n){
    int count=0;
    while(n){
        if(n%2==1){
            count++;
        }
        n=n/2;
    }
    return count;
}
bool f2(int count){
    if(count<=3&&count>1){
        return true;
    }
    if(count<=1){
        return false;
    }
    for(int i=2;i<=count/2;i++){
        if(count%i==0){
            return false;
        }
    }
    return true;
}

int countPrimeSetBits(int left, int right){
     int count=0;
     for(int i=left;i<=right;i++){
      
         if(f2(f(i))){
               count++;

         }
       
     }
     return count;

}