阶乘的一些规律(编程之美)
来源:互联网 发布:ff14国服数据库 编辑:程序博客网 时间:2024/06/05 07:14
问题一:
N!末尾有多少个0?
问题二:
N!二进制表示中最低位1的位置?
首先来介绍几个要点和规律:
n! = n(n - 1)! (n > 0)
n! = 1 (n = 0) 这里注意不要忘了
问题一等价转化 <=> N! 的质因数中有多少个10
问题二等价转化 <=> N! 的质因数中有多少个2
我们首先介绍一个公式:N! 中一共有多少个素因子(此处必须为素因子)为k.
Z = [N / k] + [N / k ^ 2] + ....+ [N / k ^ p] 其中[k ^ p > N]; 这个公式数论里面应该也经常用到,get一发。
附一发常规的解法
int solve(int data, int x){ int cnt = 0; while(data % x == 0) cnt ++;}
M = min(X, Z) X, Z 分别为 N! 中2,5的素因子的个数
int solve(int data, int x){ int cnt = 0; while(data) cnt += (data /= x); return cnt;}int main(){ int n; scanf("%d", &n); cout << min(solve(n, 2), solve(n, 5)) << endl;}
对于问题二的话:
除了上面的做法之外,还有一些更加炸天的做法
N!含有质因数2的个数,还等于N 减去 N 的二进制表示中1的数目。(有兴趣的话可以自行证明一发)
int solve(int data){ int cnt = data; while(data){ data &= data - 1; cnt --; } return cnt;}
对于给定整数,判断它是否为2的方幂
n > 0 && (n &(n - 1) == 0)
0 0
- 阶乘的一些规律(编程之美)
- 关于阶乘(源自编程之美)
- 编程之美之阶乘
- [编程之美]阶乘问题
- 编程之美基础题 N的阶乘
- 编程之美读书笔记之阶乘
- 《编程之美》读书笔记(三)——阶乘结果末尾"0"的个数
- 编程之美--不要被阶乘吓倒
- [编程之美]不要被阶乘吓倒
- 编程之美---不要被阶乘吓倒
- 编程之美:不要被阶乘吓倒
- 编程之美--不要被阶乘吓倒
- 编程之美2.2—阶乘计算
- 编程之美-阶乘方法整理
- 《编程之美》中的阶乘问题小结
- 编程之美上的一些题目
- 【编程之美】一些细节的总结
- 编程之美--不要被阶乘吓倒 求N!的质因数2的个数
- oracle trunc()函数的使用
- primitive calculator
- 浏览器设置网络代理
- cocos2d-x 大图创建帧动画
- 将一个字符串,左旋N个字符
- 阶乘的一些规律(编程之美)
- Problem A-1000
- GraphicsMagic安装
- 初步了解ReactJS
- A strange lift BNUOJ 5746
- Nginx配置文件(nginx.conf)配置详解
- HTML5笔试题20道
- DOSBOX运行QBASIC和Turbo PASCAL
- 读《光荣与梦想》四,The Glory and The Dream