[编程之美]阶乘

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的数目

 

你可能感兴趣的:(编程之美)