zoukankan      html  css  js  c++  java
  • 阶乘结果中0的个数

    阶乘N!的结果中,有多少个0呢?可以分解N!,观察结果如下:

    N! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * …… * N

    可以发现,我们可以将所有的非素数因子分解为素数因子,那么就可以得到如下的形式:

    N! = 2^x * 3^y * 5^z * 7^w ……

    可以肯定,2的次数x一定会大于5的次数z。因为从统计上来看,2每间隔一个数至少出现一次,而5需要间隔4个数才会出现一次。同时,产生0的必要条件是出现2*5。那么在2的数量多于5的情况下,5的个数就决定了阶乘结果中0的个数。所以,可以得出,最后的0的个数就是z。

    示例程序如下:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 
     5 int CalcZeroNum(int n) {
     6     int num=0;
     7 
     8     for(int i=5;i<=n;i++) {
     9         int k = i;
    10         while (k%5==0) {
    11             num++;
    12             k = k/5;
    13         }
    14     }
    15     return num;
    16 }
    17 
    18 int CalcZeroNumImprove(int n) {
    19     int num = 0;
    20     while(n/5) {
    21         n = n/5;
    22         num+=n;
    23     }
    24     return num;
    25 }
    26 
    27 int main(void)
    28 {
    29     int n;
    30     cout<<"input your number: ";
    31     cin>>n;
    32     cout<<endl;
    33     cout<<"method 1 : "<<CalcZeroNum(n)<<endl;
    34     cout<<"method 2 : "<<CalcZeroNumImprove(n)<<endl;
    35     return 0;
    36 }

    几个测试结果:

    1 f(5!)    = 1
    2 f(10!)   = 2
    3 f(20!)   = 4
    4 f(100!)  = 24
    5 f(1000!) = 249
  • 相关阅读:
    Spring Boot中Bean对象的核心特性及依赖注入分析
    Spring Boot快速入门
    throw和throws
    Spring框架中的一些常见注释
    关于maven的介绍并创建一个简单的maven工程
    luffyapi~settings
    爬虫~requests
    爬虫~scrapy1
    爬虫~scrapy
    爬虫~选择器
  • 原文地址:https://www.cnblogs.com/warnet/p/3904722.html
Copyright © 2011-2022 走看看