Problem
Let f(x)
be the number of zeroes at the end of x!
. Recall that x! = 1 * 2 * 3 * ... * x
and by convention, 0! = 1
.
- For example,
f(3) = 0
because3! = 6
has no zeroes at the end, whilef(11) = 2
because11! = 39916800
has two zeroes at the end.
Given an integer k
, return the number of non-negative integers x
have the property that f(x) = k
.
Example 1:
Input: k = 0
Output: 5
Explanation: 0!, 1!, 2!, 3!, and 4! end with k = 0 zeroes.
Example 2:
Input: k = 5
Output: 0
Explanation: There is no x such that x! ends in k = 5 zeroes.
Example 3:
Input: k = 3
Output: 5
Constraints:
0 <= k <= 10^9
Solution
class Solution {
public int preimageSizeFZF(int K) {
int count = 0;
long r = search_rank(K);
count = r==-1?0:5;
return count;
}
private long search_rank(long K) {
long lo = 4*K;
long hi = 5*K;
while (lo <= hi) {
long mid = lo + (hi - lo) / 2;
long y = f(mid);
if (K < y)
hi = mid - 1;
else if (K > y)
lo = mid + 1;
else
return mid;
}
return -1;
}
private long f(long x) {
long count = 0;
for (long i = 5; i <= x; i *= 5)
count += x / i;
return count;
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).