编程之美2.2——不要被阶乘吓倒
来源:互联网 发布:欧文生涯数据 编辑:程序博客网 时间:2024/04/29 17:51
N!中末尾0的个数
对N!进行质因数分解,N!可以分解成2^x * 3^y * 5^z*,只有2*5才会使N!的末尾产生1个0,
也就是说N!的质因数分解中有多少个2,5对末尾就有多少个0,而N!的质因数中5的个数要少于2的
个数,也就是说2,5对的个数取决于质因中5的个数,所以问题转化为求N!中质因数5的个数
5的个数Z=[N/5] + [N/5^2] + [N/5^3} + ...
[N/5] 表示不大于N的数中5的倍数贡献一个5,[N/5^2]表示不大于N的数中5^2的倍数再贡献一个5
32!= 1 * 2 * 3 * ...*31*32,其中5,10,15,20,30各贡献1个5,25贡献2个5,共7个5
int numOf0(int N){ int result = 0; while(N) { N /= 5; result += N; } return result;}
求N!的二进制表示中最低位的1的位置
从右向左从1 数起
一个数的二进制表示中如果最后是m个0,则这个数有m个质因数2,如36的二进制表示为
100100,它最后有2个0,36=2*2*9,可以看到有2个2,则最低位的1,只比质因数2的个
数多一个,它在第2+1=3位
题目转化为求N!中含有质因数的个数,等于[N/2]+[N/4]+[N/8]+[N/16]+...
[N/2]表示不大于N的数中所有2的倍数贡献一个2*/
int lowestOne(int N) { int result = 0; while(N) { N >>= 1; //(N /= 2) result += N; } return result; }
- 编程之美2.2——不要被阶乘吓倒
- 编程之美读书笔记2.2—不要被阶乘吓倒
- 编程之美——不要被阶乘吓倒
- 《编程之美》——不要被阶乘吓倒
- 编程之美—不要被阶乘吓倒
- 编程之美--不要被阶乘吓倒
- [编程之美]不要被阶乘吓倒
- 编程之美---不要被阶乘吓倒
- 编程之美:不要被阶乘吓倒
- 编程之美--不要被阶乘吓倒
- 《编程之美》学习笔记——2.2不要被阶乘吓倒
- 《编程之美》2.2 不要被阶乘吓倒(c++ 源码)
- 编程之美-2.2-不要被阶乘吓倒
- 编程之美2.2不要被阶乘吓倒
- 编程之美2.2 不要被阶乘吓倒
- [编程之美] 2.2 不要被阶乘吓倒
- 编程之美--2.2 不要被阶乘吓倒
- 编程之美2.2 不要被阶乘吓倒
- 多线程服务器的适用场合
- Core Java第四章知识点总结——函数
- DATASET2ANYCODE之二 FOREACH
- Hibernate实现mysql数据库limit查询方法
- 产品设计上的总结
- 编程之美2.2——不要被阶乘吓倒
- 交易员学堂第二课 一动感情,你就输了
- 多线程服务器的常用编程模型
- 微型机 cpu发展
- uva 120 - Stacks of Flapjacks
- 编程之美2.1——二进制中1的个数
- hdu 1542 Atlantis 二维线段树
- 【PB】多表更新
- 参数曲线