LeetCode in Python 793. Preimage Size of Factorial Zeroes Function

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 because 3! = 6 has no zeroes at the end, while f(11) = 2 because 11! = 39916800 has 2 zeroes at the end. Given K, find how many 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.
Note:

K will be an integer in the range [0, 10^9].

By means of a question on the idea to do, clearly factorial number 0 once every 5 changes in the number (0 ~ 4,5 ~ ...... 9), and that the need to find if there are N, f (N) = K, if 5 is present is returned, there is no return to zero. The mathematical derivation of N> = 4K, 4K from the beginning, every 5 increments until f (N)> = K.

class Solution(object):
    def preimageSizeFZF(self, K):
        """
        :type K: int
        :rtype: int
        """
        # either 5 or 0    
        
        def getZeroes(n):
            return 0 if n < 5 else n/5 + getZeroes(n/5)

        start = 4*K
        zeroes = getZeroes(start)
        while zeroes < K:
            start += 5
            zeroes = getZeroes(start)
        
        return 5 if zeroes == K else 0

Guess you like

Origin www.cnblogs.com/lowkeysingsing/p/11285690.html