type
status
date
slug
summary
tags
category
icon
password
创建时间
Dec 2, 2024 07:19 AM
给你两个整数
left
和 right
,在闭区间 [left, right]
范围内,统计并返回 计算置位位数为质数 的整数个数。计算置位位数 就是二进制表示中
1
的个数。- 例如,
21
的二进制表示10101
有3
个计算置位。
判断质数+数字中 1 的个数
判断质数优化+数字中 1 的个数
打表
因为 ,因此质数只有
直接打表。
位运算
将集合运算转换为位运算。例如集合 可以压缩成 也就是二进制数 。因此,
补充
判断 1 的个数
朴素做法——遍历所有位数
位运算解法 1
上面的解法,即使高位是 0,还是会进行循环检查,我们可以跳出。
上面的写法不够优雅
位运算解法 2
上面的解法虽然解决了高位为 0 的问题,但是没有解决低位为 0 的问题。我们想在低位的时候,直接统计非 0 的位数。关键代码 :
x & -x
提取整数 x
的最低位的 1。我们可以将
x - (x & -x)
改为 x & (x-1)
,两者是等价的,都是将最地位的变为 0。快速统计
使用库函数
二分法模板
第一次每隔 1 位取一个数。例如
0101
,一个数同 0101
相与就是取奇数位上的数,一个数右移一位同1010
相与就是取偶数位上的数。其他同理。 0101=5
0011=3
时间复杂度: