vjudge Trailing Zeroes (III) (二分答案 && 数论)
2024-08-30 17:29:37
嗯...
题目链接:https://vjudge.net/contest/318956#problem/E
这道题是二分答案+数论,但首先是数论,否则你不知如何二分...
首先关于一个阶乘的结果最后会出现0(即10),肯定是由2 * 5所造成的,而对于正整数 N,在[0, N]范围内,质因子中含有 2 的总是会比质因子含有 5 的要多。所以,只要需要知道质因数含有 5 的数字有多少个,即可知道末尾连续出现 0 的个数有多少...
然后我们进行二分答案,从1~5e8 + 5(一定要足够大!)进行二分,如果当前答案处理出来的5的个数正好等于a,那么它可能是答案,因为可能我们把较小的遗漏了,所以我们要继续二分,如果有比它小的,继续更新...
AC代码:
#include<cstdio>
#include<iostream> using namespace std; inline int check(int x){
int ans = ;
while(x){
ans += x / ;
x /= ;
}
return ans;
}//处理5的个数,即末尾0的个数 int main(){
int t, m = ;
scanf("%d", &t);
while(t--){
int ans = , a;
m++;
scanf("%d", &a);
int l = , r = 5e8 + ;
while(l <= r){
int mid = (l + r) >> ;
int _mid = check(mid);
if(_mid > a) r = mid - ;
else if(_mid < a) l = mid + ;
else if(_mid == a) {ans = mid; r = mid - ;}//可能有答案遗漏
}
if(ans) printf("Case %d: %d\n", m, ans);
else printf("Case %d: impossible\n", m);
}
return ;
}
AC代码
最新文章
- C#编程语言与面向对象——核心
- reason: &#39;-[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance
- Windows下一些配置信息
- ylbtech-Unitity-CS:Hello world
- 遇到java.lang.OutOfMemoryError: Java heap space问题【持续跟踪中...】
- 控制器view加载
- mysql查询最近一小时的数据
- Struts2中的ActionContext
- 判断客户端使用的是安卓还是苹果,然后加载对应的css文件
- badboy 录制脚本并并发脚本
- 剑指offer 第十天
- hive 中遇到的正则
- Ipython使用指南
- [MongoDB]Mongo基本使用
- 【Vue.js】vue引入组件报错:该组件未注册?
- vscode编辑器自动生成.vue文件
- MVC在filter中如何获取控制器名称和Action名称
- 吉哥系列故事——临时工计划(dp)
- Fluent UDF【4】:C语言
- MTK 锁屏配置