任何数在计算机内部都是用二进制表示的,可以用这个特性来快速判断N!的二进制表示中最低位1的位置。

解法一:

将一个数的二进制数除以2,若二进制数的末尾是0,则能整除,否则不能整除。

因此,求 N!的二进制表示中最低位1的位置 即为求 N!中有多少个质因数2

以下为代码1:

#include <iostream>
using namespace std;
int main(void)
{int n,m;m=0;cin>>n;while(n){n>>=1;m+=n;}cout<< m+1 <<endl;    //m为n!中质因数2的个数,所以最后结果要加 1return 0;
}

解法二:

N!中含有质因数2的个数,等于 n-(n的二进制表示中1的个数)

(这个规律可自行证明)

代码2:

#include <iostream>
using namespace std;
int main(void)
{int n,i,j,m;m=0;j=0x1;cin>>n;i=n;while(i){m+=(i&j);i>>=1;}cout << n-m+1 <<endl;    //m为n!中质因数2的个数,所以最后结果要加 1return 0;
}

转载于:https://blog.51cto.com/anglecode/1631147

编程之美2——N!的二进制表示中最低位1的位置相关推荐

  1. 程序员面试100题之八:不要被阶乘吓倒(二进制表示中最低位1的位置 )

    阶乘(Factorial)是个很有意思的函数,但是不少人都比较怕它,我们来看看两个与阶乘相关的问题: 1. 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800, ...

  2. 编程之美2.10:寻找数组中的最大值和最小值

    编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...

  3. 编程之美2.2 不要被阶乘吓倒

    开始看到这道题目的时候,我还以为是利用字符串表示整型数的思想,后来一看,由于是一个数的阶乘,那么,如果这个数本身就很大,那么,即使是利用字符串表示也是不合理的,所以,看了下这道题的解释,书中给出了一个 ...

  4. 编程之美2.1 求二进制中1的个数

    最近一段的时间,一直在看编程之美之类的算法书籍,刚开始看编程之美,感觉到难度太大,有时候也不愿意去翻动这本书,不过,经过一段时间的修炼,我也彻底的喜欢上这本书了, 书中的算法涉及到很多方面,树,链表, ...

  5. 2017“编程之美”终章:AI之战勇者为王

    编者按:8月15日,第六届微软"编程之美"挑战赛在选手的火热比拼中圆满落下帷幕."编程之美"挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起, ...

  6. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  7. Java 并发编程之美:并发编程高级篇之一

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  8. 编程之美1:那些关于1的个数的经典面试题

    那些关于1的个数的经典面试题 好长时间没有练算法了,笔试题一做,发现非常吃力,所以近日来找来<编程之美>一书来看看练练.为了激励自己多练,楼楼可能会出个专栏什么的,感兴趣的同学我们可以一起 ...

  9. 求二进制中1的个数(编程之美2.1)

    行文脉络 解法一--除法 解法二--移位 解法三--高效移位 解法四--查表 扩展问题--异或后转化为该问题 对于一个字节(8bit)的变量,求其二进制"1"的个数.例如6(二进制 ...

最新文章

  1. python模块--Beautifulsoup
  2. 不知道当前谁激活键盘时的隐藏键盘方法
  3. IDEA 快捷键MacOS
  4. 修改Tomcat可支持get传参方式的url长度,get形式
  5. sign函数的功能 oracle,Oracle中sign函数和decode函数的使用
  6. c++ 中文乱码_Visual Studio Code 中 CodeRunner 插件的输出窗口中文乱码
  7. linux Memcached服务
  8. new thread后会阻塞主程序吗_阻塞模型将会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?...
  9. bootstraptable 怎么在特定行添加数据_手把手教你做一个“渣”数据师,用Python代替老情人Excel...
  10. Spring源码学习笔记:Spring设计模式对比和Spring的OOB,BOP,AOP,IOC,DI/DL
  11. Hibernate最全面试题
  12. 破解zip,WinRaR等压缩包加密
  13. ZoomIt使用教程
  14. jQuery实现表格行的动态增加与删除(改进版)
  15. Elasticsearch(六)了解全文搜索
  16. 程序员兼职网站(自由职业)
  17. 完全掌握Python: 在一门课程中使用 Python 编程所需的一切 | Complete Python Mastery
  18. Python集合运算
  19. 「镁客·请讲」泛联智能蒲忠文:灯联网是未来物联网行业的一个杀手级应用...
  20. python怎么做q检验_关于eviews做时间序列模型的残差Q统计量检验我决定写一些!...

热门文章

  1. JVM优化系列-对象内存分配和回收的细节
  2. Hadoop入门基础教程 Hadoop之单机模式搭建
  3. linux下tmpfs文件系统简介
  4. 服务器端系统饼图,服务器 操作系统 饼图
  5. 删除mysql主键语句_MySQL主键添加/删除
  6. redis数据类型hash总结
  7. java使用netty
  8. 刷前端面经笔记(九)
  9. MongoDB(五)-- 副本集(replica Set)
  10. Spring Session + Redis实现分布式Session共享