题意:
求最小的数N满足N!包含x个零。
思路:
简单数论,0必然是2*5的结果,所以有一对(2,5)就有一个0,2比较多所以找5就行了,判断每个数字的阶乘含有多少个素因子5就是找有多少个5,多少个25……然后二分就行了。
代码:
#define INF 0x3f3f3f3f
int n,m;
int flag,sum,ave,ans,res,len,ans1,ans2;
int numOfZero(int u)
{
int i,t,res;
for(res=0,i=5;i<=u;i*=5)
res+=u/i;
return res;
}
int fen()
{
int x=0,y=INF;
while(x<=y)
{
m=(x+y)>>1;
if(numOfZero(m)>n) y=m-1;
else x=m+1;
}
y-=y%5;
if(numOfZero(y)==n)return y;
return -1;
}
int main()
{
int i,j,k,kk,t,x,y,z;
scanf("%d",&k);
kk=0;
while(k--)
{
scanf("%d",&n);
printf("Case %d: ",++kk);
t=fen();
if(t!=-1) printf("%d\n",t);
else printf("impossible\n");
}
return 0;
}