数论 - 算数基本定理的运用 --- nefu 118 : n!后面有多少个0

 #


 

Mean: 

 略。

analyse:

 刚开始想了半天都没想出来,数据这么大,难道是有什么公式?

首先我们要知道一点:n!里面所有的0都是2*5得来的,而且不管怎样2的数量一定是>5的数量,所以我们只需要考虑有多少个5就可。

后面也是看了解题报告才知道有这么一个结论。

这是算数基本定理的一个结论:

   n!的素因子分解中的素数p的幂为:[n/p]+[n/p^2]+[n/p^3]+...

知道这个结论,这道题就是一道大水题,1分钟ac。数论就是这样==。

Time complexity:O(n)

 

Source code:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.............................................
           佛祖镇楼                  BUG辟易
     佛曰:
           写字楼里写字间,写字间里程序员;
           程序人员写程序,又拿程序换酒钱。
           酒醒只在网上坐,酒醉还来网下眠;
           酒醉酒醒日复日,网上网下年复年。
           但愿老死电脑间,不愿鞠躬老板前;
           奔驰宝马贵者趣,公交自行程序员。
           别人笑我忒疯癫,我笑自己命太贱;
           不见满街漂亮妹,哪个归得程序员?
*/
 
//Memory   Time
// 1347K   0MS
// by : Snarl_jsb
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<string>
#include<climits>
#include<cmath>
#define MAX 1100
#define LL long long
using namespace std;
 
 
int main()
{
//    freopen("C:\\Users\\ASUS\\Desktop\\cin.txt","r",stdin);
//    freopen("C:\\Users\\ASUS\\Desktop\\cout.txt","w",stdout);
    int t,m;
    cin>>t;
    while(t--)
    {
        cin>>m;
        int five=5;
        int ans=0;
        while(five<=m)
        {
            ans+=m/five;
            five*=5;
        }
        cout<<ans<<endl;
    }
    return 0;
}
    

  

posted @   北岛知寒  阅读(179)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示
主题色彩