[编程之美]阶乘

View Code
 1 //n!进行质因数分解,n!=2^x+3^y+5^z...所以末尾0的个数为min(x,z),又因为x>z,所以只要求出z的值即可
2 int Solution(int n)
3 {
4 int count=0;
5 for(int i=1;i<=n;++i)
6 {
7 int j=i;
8 while(j%5==0)
9 {
10 count++;
11 j=j/5;
12 }
13 return count;
14 }
15 }
16
17 //公式:z=[n/5]+[n/5^2]+[n/5^3]+...其中[n/k]表示1,2,3,...,n中能被k整除的数的个数
18 int Solution(int n)
19 {
20 int count=0;
21 while(n)
22 {
23 count+=n/5;
24 n=n/5;
25 }
26 return count;
27 }
28
29 //第二个问题等同于求n!中含质因数2的个数,等于[n/2]+[n/4]+[n/8]+...
30 int Solution(int n)
31 {
32 int count=0;
33 while(n)
34 {
35 n=n>>1;
36 count+=n;
37 }
38 return count;
39 }
40
41 //n!含有质因数2的个数还等于n减去n的二进制表示中1的数目

 

转载于:https://www.cnblogs.com/daniagger/archive/2012/03/26/2417780.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值