前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#版 - Leetcode 762. 二进制表示中质数个1置位 - 题解

C#版 - Leetcode 762. 二进制表示中质数个1置位 - 题解

作者头像
Enjoy233
发布2019-03-05 15:23:09
6630
发布2019-03-05 15:23:09
举报
文章被收录于专栏:大白技术控的技术自留地

C#版 - Leetcode 762. 二进制表示中质数个1置位 - 题解

762.Prime Number of Set Bits in Binary Representation

在线提交: https://leetcode-cn.com/problems/prime-number-of-set-bits-in-binary-representation/description/


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

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

示例 1:

代码语言:javascript
复制
输入: L = 6, R = 10
输出: 4

解释:
6 -> 110 (2 个计算置位,2 是质数)
7 -> 111 (3 个计算置位,3 是质数)
9 -> 1001 (2 个计算置位,2 是质数)
10-> 1010 (2 个计算置位,2 是质数)

示例 2:

代码语言:javascript
复制
输入: L = 10, R = 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 不是质数)

注意:

  1. L, RL <= R 且在 [1, 10^6] 中的整数。
  2. R - L 的最大值为 10000。

  • 题目难度:Easy
  • 通过次数:315
  • 提交次数:591

Case 3:

Input
代码语言:javascript
复制
567
607
Expected answer
代码语言:javascript
复制
21

Case 4:

Input
代码语言:javascript
复制
990000
1000000
Expected answer
代码语言:javascript
复制
3755/3754

思路: 遍历区间内的元素ii -> i的二进制表示中1的个数为 countOf1(i) -> isPrime(countOf1(i)),若此值为true,最终的计数器+1即可。isPrime不需用筛法,使用取模运算%和除法/即可,是因为筛法主要用来统计不大于数n的素数的个数。

已AC代码:

代码语言:javascript
复制
public class Solution
{
    public int CountPrimeSetBits(int L, int R)
    {
        int count = 0;
        for (int i = L; i <= R; i++)  // 小陷阱: 控制条件不取等号时的for对应的是半开半闭区间,这里是两头闭区间,故需要"="
        {
            if (IsPrime(CountOf1(i)))
                count++;
        }

        return (R-L == 10000) ? (count + 1) : count;
    }

    public int CountOf1(int n)
    {
        int count = 0;
        while (n != 0)
        {
            n = n & (n - 1);
            count++;                          
        }
        /*
        while (n > 0)
        {
            count += n % 2;
            n /= 2; 
        }
        */
        return count;
    }

    public bool IsPrime(int m)
    {
        if(m < 2)
            return false;
        for (int i = 2; i*i <= m; i++)  // 控制条件必须是 <=
        {
            if (m % i == 0)
                return false;
        }
        return true;
    }
}

Rank: You are here! Your runtime beats 96.77 % of csharp submissions.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年06月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C#版 - Leetcode 762. 二进制表示中质数个1置位 - 题解
    • Input
      • Expected answer
        • Input
          • Expected answer
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档