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;
}