方法一:假设N!=K*10M,K不能被10整除,那么N!尾数就有M个0。再对N!进行质因子分解:N!=2x*3y*5z...由于10=2*5,即每一对2和5相乘都可以得到1个0,所以M只与指数x、z有关,并且M=min(x,z)(x,z分别为N!的中因子2,因子5的个数)。因为N!中每两个数字就有一个数为2的倍数,即每5个数中(最后一个数为5的倍数)至少有2个数为2的倍数,而只有最后一个数为5的倍数,所以可知因子为2的个数一定不小于因子为5的个数(x>=z),即M=z。因此,我们只需统计N!中因子为5的个数即可!时间复杂度为O(nlog5n),其中n=N/5。

 #include<bits/stdc++.h>
using namespace std;
int main(){
int n,cnt,tmp;
while(cin>>n){
cnt=;
for(int i=;i<=n;i+=){//n!内i只有为5的倍数才可产生因子5
tmp=i;
while(tmp%==)cnt++,tmp/=;//累加因子5的个数
}
cout<<cnt<<endl;
}
return ;
}

方法二:如果N是109呢,用方法一肯定会超时。此时有一条公式可以快速地求出N!尾数为0的个数:M=[N/5]+[N/52]+[N/53]+...公式的意思就是不大于N且为5的倍数的每个数各贡献一个因子5加上不大于N且为52的倍数的每个数各贡献一个因子5加上...,将所有结果累加即为N!中因子5的个数。时间复杂度为O(log5N)。举个例子:当N=25时,N!内为5的倍数的数有5,10,15,20,25,对应数字包含因子为5的个数为1,1,1,1,2,(很明显通过法一可知25!尾数有6个0)套一下法二的公式:N内为5的倍数的个数有N/5=25/5=5个,即前面5个数各贡献一个因子5,继续累加:N/52=25/25=1个,即最后一个数25也贡献一个因子5,所以25!尾数有6个0,因此验证了法二的正确性。其实这里用到了一个数论知识:若p是质数,p<=n,则N!是p的倍数,设px为p在N!内的最高次幂,则x=[N/p]+[N/p2]+[N/p3]+...,并且有[N/(p*p)]=[[N/p]/p]。结合法一可知p=5,即只需求N!内因子为5的个数!

 #include<bits/stdc++.h>
using namespace std;
int main(){
int n,cnt;
while(cin>>n){
cnt=;
while(n>4)cnt+=n/,n/=;
cout<<cnt<<endl;
}
return ;
}

最新文章

  1. 读取xml数据装配到字典中之应用场景
  2. emacs不能使用中文输入法
  3. js:数据结构笔记10--图和图算法
  4. hdwiki 的模板和标签
  5. Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建
  6. MAC 下cocos2d-x lua 使用dragonbones的方法
  7. Windows+Atlassian-Jira-6.0.4+MySql5.0安装破解汉化
  8. JAVA中的Buffer
  9. Java框架之Hibernate(三)
  10. vue环境搭建与创建第一个vuejs文件
  11. 两个ArrayList之间求交并补
  12. 计算概论(A)/基础编程练习(数据成分)/3:整数的个数
  13. Java从命令行接受多个数字并求和
  14. win7下python2.6如何安装setuptools和pip
  15. day20 python sys os time json pickl 正则
  16. mpu6050 DMP库的移植
  17. android studio 3.0.1使用笔记(二)
  18. Backup and restore of FAST Search for SharePoint 2010
  19. 不一样的入门:看C# Hello World的17种写法
  20. 51nod 1190 最小公倍数之和 V2

热门文章

  1. Promise编程规范
  2. ln 软连接 &amp; 硬连接
  3. Deepin-安装QQ音乐(Windows程序)
  4. 【机器学习具体解释】SVM解二分类,多分类,及后验概率输出
  5. android 多进程 Binder AIDL Service
  6. 积跬步,聚小流------ps有用小技巧,改变png图标颜色
  7. 浅谈asp.net通过本机cookie仿百度(google)实现搜索input框自己主动弹出搜索提示
  8. 2016/05/06 Sublime Text 3 常用插件以及安装方法(转)
  9. Datatables 1.10.x在命名上与1.9.x
  10. IsNumeric 判断字符串是否为数字(使用Val函数实现),这个函数相当于Java的IsNaN函数