算法题每日一练---第56天:二进制中质数个数

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

4.png

一、问题描述


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

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


题目链接:二进制中质数个数


二、题目要求


样例

输入: L = 6, R = 10
输出: 4
解释:
6 -> 110 (2 个计算置位,2 是质数)
7 -> 111 (3 个计算置位,3 是质数)
9 -> 1001 (2 个计算置位,2 是质数)
10-> 1010 (2 个计算置位,2 是质数)


考察

位运算基础题型
建议用时10~25min


三、问题分析


本题是位运算的第11题,没了解过位运算相关知识点可以看这一篇文章,讲解比较详细:

算法题每日一练---第45天:位运算


题目说的有点迷惑,其实就是区间范围内每一个数字,假如转换成二进制之后1的个数为质数,那么就计算,否则不作数,下面分两步完成:


1.二进制 1 的个数


这一题数的范围最大是10^6,20位2进制就够用,你要用 int型 32位最大也没有多大影响。

这部分需要用到位运算的 与 左移运算,第45天有讲,我就不详细说了。

用左移运算一位一位计算是否包含1,如果相与的结果为1,那么计数器++。


2.判断是否为质数


质数:除了1和本身,不能被其他的自然数整除。

单独构造一个judge判断函数就行。


四、编码实现


classSolution {
public:
booljudge(intx)//质数判断    {
inti;
if(x<2) returnfalse;
for(i=2;i*i<=x;i++)
if(x%i==0)
returnfalse;
returntrue;
 }
intcountPrimeSetBits(intleft, intright) {
inti,j,ans=0,k=0;//初始化数据for(i=left;i<=right;i++)//循环计数        {
ans=0;//计数器为0for(j=0;j<20;j++)
            {
if(i&(1<<j))//判断1的个数                {
ans++;
                }
            }
if(judge(ans))//判断是否为质数k++;
        }
returnk;//输出结果    }
};

五、测试结果10.png

相关文章
|
6月前
|
算法 Java C++
试题 算法训练 6-2递归求二进制表示位数
试题 算法训练 6-2递归求二进制表示位数
45 0
|
6月前
|
算法 Java
算法编程(十四):颠倒二进制位
算法编程(十四):颠倒二进制位
53 0
|
监控 算法 安全
二进制转十进制算法简介及其在监控软件中的应用
在上网行为管理软件中,匈牙利算法主要应用于解决资源分配的问题。上网行为管理软件可能存在多个用户同时访问同一文件或打印机的情况,为了确保资源的公平共享,需要对资源进行分配
224 2
|
机器学习/深度学习 算法
【算法基础】筛质数
【算法基础】筛质数
60 0
|
1月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
65 0
|
4月前
|
机器学习/深度学习 算法 计算机视觉
通过MATLAB分别对比二进制编码遗传优化算法和实数编码遗传优化算法
摘要: 使用MATLAB2022a对比了二进制编码与实数编码的遗传优化算法,关注最优适应度、平均适应度及运算效率。二进制编码适用于离散问题,解表示为二进制串;实数编码适用于连续问题,直接搜索连续空间。两种编码在初始化、适应度评估、选择、交叉和变异步骤类似,但实数编码可能需更复杂策略避免局部最优。选择编码方式取决于问题特性。
|
4月前
|
算法
Ngnix02 --- Ngnix的功能特性及常见功能,Ngnix常用的功能模块,有不同算法,根据不同算法进行转发,ip_hash、url_hash、fair,核心组成 ngnix二进制可执行文件
Ngnix02 --- Ngnix的功能特性及常见功能,Ngnix常用的功能模块,有不同算法,根据不同算法进行转发,ip_hash、url_hash、fair,核心组成 ngnix二进制可执行文件
|
5月前
|
算法 Java Go
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
65 2
|
6月前
|
人工智能 算法 C++
c++算法学习笔记 (17) 质数
c++算法学习笔记 (17) 质数
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径