Description
每一个数都有若干个后缀零,比如100有2个、10有1个、1有0个,那么问题来了,已知整数n,求x使其满足x!的后缀零个数为n
Input
输入一个数T (≤ 10000),表示有T组数据
接下来T行每一行有一个数n (1 ≤ n≤10^8)
Output
每组数据首先输出当前组数(格式参见Sample Output),之后输出满足情况时最小的x,如果x不存在,输出no
Sample Input
3
1
2
5
Sample Output
Case 1: 5
Case 2: 10
Case 3: no
题意很简单 ,给一个n求一个最小的x,使x满足x!的后缀零个数为n;找不到输出no
想要在乘法中产生0,要么乘以一个后缀零不为0的数,要么乘以一个5的倍数,细想一下,后缀零不为0的数 一定是5的倍数,所以 只要题目就是求 一个最小的x使x!中5的因子个数;
首先最容易想到的从5开始5个数5个数的加,循环遍历,直到5的因子个数达到n,但是这样写肯定超时。
标程是用二分,可以解。
这里我给出一个非二分的解题方法;本质仍然是暴力;
思路:上面说一次+5暴力循环会超时,那么就想到如果一次+25/125/625/3125是否可行?
如果题读懂很容易能想到一个东西,从1开始每5个数的积5的因子个数是1(小于25的情况下),eg:1-5的积5的因子个数是1,5-10的积5的因子个数是1…
每25个数的积5的因子个数是6(小于125的情况下),eg:1-25的积5的因子个数是6,26-50的积5的因子个数是6….,这个很好算,拿1-25举例,1-25可以分成5组,有4组的积5的因子个数是1,含25的那一组因为25这个数特殊 这一组的积5的因子个数是2;
往下递推 可以得出
1开始每5个数的积5的因子个数是1(小于25的情况下)
每25个数的积5的因子个数是6(小于125的情况下)
每125个数的积5的因子个数是31(小于625的情况下)
每625个数的积5的因子个数是156(小于3125的情况下)
这样可以事先存两个数组;
i