XDU1019 阶乘因子的个数
2016-02-24 22:53
246 查看
题意是让你求一个最小的N, 使得N!有M个0,N的阶乘中2的因子是远多于5的因子的个数, 因此我们统计出5的个数就知道其后面有几个0,对于一个数mid, mid!中5的因子的个数为mid/5 + mid/25 + mid/5^3 + ... 可以发现mid越大mid!中的5的个数越多, 因此我们可以二分答案, 代码如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; typedef long long LL; int M; int check(LL mid) //mid 的阶乘中5的个数 { LL a = 5; int res = 0; while(a <= mid) { res += mid/a; a *= 5; } return res; } int main() { int T; cin>>T; while(T--) { cin>>M; LL l=1, r=1000000000; LL res = -1; while(l <= r) { LL mid = (l+r)/2; int tp = check(mid); if(tp == M) { res = mid; r = mid-1; } else if(tp > M) r = mid - 1; else l = mid + 1; } if(res == -1) cout<<"No solution\n"; else cout<<res<<endl; } return 0; }
相关文章推荐
- 【SPOJ-SARRAY】Suffix Array【后缀数组】
- 二维数组的运算与指针
- 常用第三方库与框架
- 后缀自动机(SAM) :SPOJ LCS - Longest Common Substring
- 关于C++中智能指针与类型推导的说明
- Correlated Subqueries 相关子查询
- PAT-1036 跟奥巴马一起编程
- 类的高级概念
- Android编译过程详解(三)
- Android 图片处理方法
- iOS 用QuickLook浏览文件和图片
- 流媒体通信协议HLS与DASH的对比
- 读取手机联系人,并用listview显示
- DiskMgr的限制项
- linux下ppp拨号无线上网
- [Python入门]Chapter7 迭代器
- Scala学习3之快学scala第五章习题之构造器
- windows server 2003在升级到SP2后补齐补丁开机错误提示
- Android编译过程详解(二)
- UVA 12166 Equilibrium Mobile