不要被阶乘吓倒
来源:互联网 发布:局域网域名解析软件 编辑:程序博客网 时间:2024/06/01 08:42
题目一
求N!的末尾有多少个0?
N!=1*2*3*...*(N-1)*N;
10的质数分解只有2和5,那么假设N!中通过质数分解,所能得到的2的个数为X,所能得到的5的个数为Y,则X和Y中较小的一个极为连乘中10的个数,也就得到了N!结果中末尾的0的个数。不难看出,X > Y在N!中是一定成立的,则问题转化为求Y。
最简单的解法:
int count=0;for(int i=1;i<=N;i++){ int num=i; while(num % 5 == 0) { count ++; num/=5; }}return count;
巧妙地解法,只对N进行操作:
Y= [ N/5 ] + [ N/(5^2) ] + [ N/(5^3) ] + ...... 总存在一个K,使得5^K > N,即[N / 5^K] == 0.
公式中,[N / 5]表示不大于N的数中5的倍数的个数,每一个都为 N!贡献了一个质因子5;[N / (5^2) ]表示不大于N的数中5*5的倍数的个数,每一个都又为N!贡献了一个质因子5,依次类推,可得:
int count=0; while(N != 0) { N/=5; count+=N; }}return count;
问题二:
求N!的二进制表示中最低位1的位置。
由上题可以看出,此题求的是N!中质因子2的个数X。
int count=0; while(N != 0) { N>>=1; count+=N; }}return count;
0 0
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 2.2 不要被阶乘吓倒
- 试题答案_不要被阶乘吓倒
- 编程之美--不要被阶乘吓倒
- [编程之美]不要被阶乘吓倒
- 编程之美---不要被阶乘吓倒
- 2.2不要被阶乘吓倒(读书笔记)
- 编程之美:不要被阶乘吓倒
- 不要被阶乘吓倒(1)
- java创建菜单
- 清理缓存
- 润乾报表(reportConfig.xml文件说明)
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
- 基于google zxing二维码的生成,直接返回页面图片
- 不要被阶乘吓倒
- Maven项目在编译及导入Eclipse时出现的错误汇总处理
- JavaScript强化教程——DOM编程(两种控制div移动的方法)
- Quartz CronExpression表达式
- 来来来,一起五句话搞定JavaScript作用域
- Python随堂笔记7-8-9
- 机房
- 关于百度地图的一些问题总结
- 小结python