🗒️762. 二进制表示中质数个计算置位
2024-12-2
| 2024-12-3
0  |  阅读时长 0 分钟
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
时间复杂度:

📎 参考

  • 【题单】数学算法
  • 3044. 出现频率最高的质数2614. 对角线上的质数
    Loading...