Suffix Zeroes
时间限制: 1 Sec 内存限制: 128 MB
题目描述
这个游戏超休闲的~。现在你需要找一个自然数n,你找的自然数需要满足n!的末尾恰好有k个0(当然我们都是十进制下的数,n! = 1*2*3*…*n)。比如:5!= 120,尾部恰好有一个0。
输入
先输入T,代表有T组数据(T ≤10000)
接下来的T行每一行都包括一个数字k(1≤k≤108)。具体含义请见题意。
输出
如果能找到这样的数,请输出满足条件的最小的自然数n,如果不存在这样的自然数,请输出impossible。
样例输入
2
1
5
样例输出
Case 1: 5
Case 2: impossible
来源/分类
题解:
末尾有一个零就代表有一个因数10,而10=2*5
当n>=5时,2的个数肯定比5多,所以只要枚举5的个数就行了
而能分解出5的数量为n/5+n/(5^2)+n/(5^3)……
所以5的个数小于5e8——直接二分答案再以上述方法检查就AC了
代码:
#include<bits/stdc++.h>
#define N 10005
#define Mod 1000007
#define M 10005
#define eps 1
using namespace std;
int check(int x)
{
int sum=0,a=5;
while(x>=a)
{
sum += x / a;
a *= 5;
}
return sum;
}
int main()
{
int t;
scanf("%d",&t);
for(int i = 1;i <= t; ++i)
{
int k;
scanf("%d",&k);
int l = 1,r = 5e8;
while(r - l > eps)
{
int mid = (l + r) / 2;
if(check(mid) >= k) r = mid;
else l = mid;
}
printf("Case %d: ",i);
if(check(r) == k) printf("%d\n",r);
else puts("impossible");
}
return 0;
}