LeetCode 762[二进制表示中质数个计算置位]

题目

链接

LeetCode 762[二进制表示中质数个计算置位]

详情

实例

提示

题解

思路

两个条件:

1、二进制位为1

2、满足条件1的个数为质数

 

 首先 for 循环遍历区间

        for (int i = left; i < right + 1; i++)
        {
            int iCount = 0;//二进制位为1的个数
            int iNum = i;//待转换成二进制的数
            ...
        }

以下为for 循环的循环体:

求 iNum 二进制位并求出二进制位为1的个数 iCount:

常规方法就是 iNum 不停的循环除2,然后它的余数就是二进制位了,当其余数为1时,iCount 加1,直到最后得到的商为0,就退出循环

            while (iNum > 0)
            {
                if (1 == (iNum % 2))
                    iCount++;

                iNum /= 2;
            }

再判断 iCount 是否为质数,为质数则返回值 iRet 加1

            if (is_Prime(iCount))
                iRet++;

遍历结束后输出 iRet

        return iRet;

 

 

此处写了一个 is_Prime 函数用来判断是否为质数:

首先判断传入值 num 是否为 0,为 0 则不为质数,输出false

        if (0 == iNum)
            return false;

然后判断传入值 num 是否为 1,为1则不为质数,输出false

        if (1 == iNum)
            return false;

之后 for 循环来从 2 开始遍历,到 num - 1 循环结束,如果遍历值能被 num 整除,则不为质数,输出 false

        for (int i = 2; i < iNum; i++)
        {
            if (0 == iNum % i)
                return false;
        }

遍历结束,则除了 1 和 num 本身外,不能整除,则为质数,输出 true

        return true;

代码

posted @   EricsT  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇
点击右上角即可分享
微信分享提示