题目
满足 的末尾恰好有 个 的最小的 是多少?
如果这样的 不存在输出 。
输入格式
一个整数 。
输出格式
一个整数代表答案。
数据范围
对于 的数据, 。
对于 的数据, 。
输入样例:
2
输出样例:
10
解题
方法一:数学 分解质因数 二分查找
思路
末尾 的数量取决于其因子 的数量与其因子 的数量,而因子 的数量显然比因子 要多,所以末尾 的数量实际上等于 分解质因数后 的数量。
求 的阶乘中因子 的数量: (也就是 )。
有了以上的公式,只需要二分查找满足 的情况下 的最小值即可。
(实际做题中二分查找的条件是 ,最后判断如果 则输出 ,否则不存在这样的 输出 )
代码
import java.util.*;
import java.io.*;
import java.math.*;
public class Main {
static long count(long n) {
long cnt = 0;
while (n > 0) cnt += n /= 5;
return cnt;
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
long k = Long.parseLong(in.readLine());
long l = 0L, r = Long.MAX_VALUE;
while (l < r) {
long m = l + (r - l >> 1);
if (count(m) >= k) r = m;
else l = m + 1;
}
System.out.println(count(l) == k ? l : -1);
}
}
评论区