求一个N的阶乘后面有多少个0

N!后面有多少个0

前置知识:质因数分解

思路:对N!进行质因数分解(是对阶乘分解不是对N分解),N!后面有多少个0就是看这些质因数相乘能产生多少个0,而能相乘产生0的两个质数只有2,5,而N!分解后2的指数一定比5的指数大(关键,因为只要是偶数都能分解出2,而5要每隔5个数才能分解出一个),所以我们就看一看N!能分解出几个5就行了。

操作:质因数能分解出5的整数每隔5会出现一次,我们把这个数除以5,取整得到的就是1~N里有多少个数会分解出5,但这样还没有完,有的数会分解出不止一个5,如25=5x5,就能分解出两个5,而我们N/5已经得到了1x5,2x5…5x5…and so on,又没隔5个数可以多得到一个5,所以我们总结如下:
用N不停对5取整,将结果加入ans中,直到N<5,我们就得到了一共分解出了多少个5,即得到了N!有多少个0.

P118

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int m;
    scanf("%d",&m);
    int n;
    while(m--)
    {
        scanf("%d",&n);
        int ans=0;
        while(n>=5)
        {
            ans+=(n/5);
            n/=5;
        }
        printf("%d\n",ans);
    }
    return 0;
}

发布了44 篇原创文章 · 获赞 13 · 访问量 2327

猜你喜欢

转载自blog.csdn.net/NEFU_kadia/article/details/104456505
今日推荐