# Find the smallest number X such that X! contains at least Y trailing zeros.

Given an integer Y, find the smallest number X such that X! contains at least Y trailing zeros.
Prerequisites – Count trailing zeroes in factorial of a number

Examples:

Input : Y = 2
Output : 10
10! = 3628800, which has 2 trailing zeros. 9! = 362880, which has 1 trailing zero. Hence, 10 is the correct answer.

Input : Y = 6
Output : 25
25! = 15511210043330985984000000, which has 6 trailing zeros. 24! = 620448401733239439360000, which has 4 trailing zeros. Hence, 25 is the correct answer.

Approach: The problem can be easily solved by using Binary Search. The number of trailing zeros in N! is given by the count of the factors 5 in N!.Read this article for prerequisites. The countFactor(5, N) function returns the count of factor 5 in N! which is equal to count of trailing zeros in N!. The smallest number X such that X! contains at least Y trailing zeros can be computed quickly by using binary search on a range [0, 5 * Y] using this function.

Below is the implementation of above approach.

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to count the number ` `// of factors P in X! ` `int` `countFactor(``int` `P, ``int` `X) ` `{ ` `    ``if` `(X < P) ` `        ``return` `0; ` ` `  `    ``return` `(X / P + countFactor(P, X / P)); ` `} ` ` `  `// Function to find the smallest X such ` `// that X! contains Y trailing zeros ` `int` `findSmallestX(``int` `Y) ` `{ ` `    ``int` `low = 0, high = 5 * Y; ` `    ``int` `N = 0; ` `    ``while` `(low <= high) { ` `        ``int` `mid = (high + low) / 2; ` ` `  `        ``if` `(countFactor(5, mid) < Y) { ` `            ``low = mid + 1; ` `        ``} ` ` `  `        ``else` `{ ` `            ``N = mid; ` `            ``high = mid - 1; ` `        ``} ` `    ``} ` ` `  `    ``return` `N; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `Y = 10; ` ` `  `    ``cout << findSmallestX(Y); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the above approach  ` `class` `GFG  ` `{  ` `     `  `    ``// Function to count the number  ` `    ``// of factors P in X!  ` `    ``static` `int` `countFactor(``int` `P, ``int` `X)  ` `    ``{  ` `        ``if` `(X < P)  ` `            ``return` `0``;  ` `     `  `        ``return` `(X / P + countFactor(P, X / P));  ` `    ``}  ` `     `  `    ``// Function to find the smallest X such  ` `    ``// that X! contains Y trailing zeros  ` `    ``static` `int` `findSmallestX(``int` `Y)  ` `    ``{  ` `        ``int` `low = ``0``, high = ``5` `* Y;  ` `        ``int` `N = ``0``;  ` `        ``while` `(low <= high)  ` `        ``{  ` `            ``int` `mid = (high + low) / ``2``;  ` `     `  `            ``if` `(countFactor(``5``, mid) < Y)  ` `            ``{  ` `                ``low = mid + ``1``;  ` `            ``}  ` `     `  `            ``else` `            ``{  ` `                ``N = mid;  ` `                ``high = mid - ``1``;  ` `            ``}  ` `        ``}  ` `     `  `        ``return` `N;  ` `    ``}  ` `     `  `    ``// Driver code  ` `    ``public` `static` `void` `main(String args[])  ` `    ``{  ` `        ``int` `Y = ``10``;  ` `     `  `        ``System.out.println(findSmallestX(Y));  ` `    ``}  ` `}  ` ` `  `// This code is contributed by Ryuga  `

## Python3

 `# Python3 implementation of the approach ` ` `  `# Function to count the number ` `# of factors P in X! ` `def` `countFactor(P, X): ` `    ``if` `(X < P): ` `        ``return` `0``; ` ` `  `    ``return` `(X ``/``/` `P ``+` `countFactor(P, X ``/``/` `P)); ` ` `  `# Function to find the smallest X such ` `# that X! contains Y trailing zeros ` `def` `findSmallestX(Y): ` ` `  `    ``low ``=` `0``; ` `    ``high ``=` `5` `*` `Y; ` `    ``N ``=` `0``; ` `    ``while` `(low <``=` `high): ` `        ``mid ``=` `(high ``+` `low) ``/``/` `2``; ` ` `  `        ``if` `(countFactor(``5``, mid) < Y): ` `            ``low ``=` `mid ``+` `1``; ` ` `  `        ``else``: ` `            ``N ``=` `mid; ` `            ``high ``=` `mid ``-` `1``; ` ` `  `    ``return` `N; ` ` `  `# Driver code ` `Y ``=` `10``; ` ` `  `print``(findSmallestX(Y)); ` ` `  `# This code is contributed by mits `

## C#

 `// C# implementation of the approach ` `class` `GFG ` `{ ` `     `  `// Function to count the number ` `// of factors P in X! ` `static` `int` `countFactor(``int` `P, ``int` `X) ` `{ ` `    ``if` `(X < P) ` `        ``return` `0; ` ` `  `    ``return` `(X / P + countFactor(P, X / P)); ` `} ` ` `  `// Function to find the smallest X such ` `// that X! contains Y trailing zeros ` `static` `int` `findSmallestX(``int` `Y) ` `{ ` `    ``int` `low = 0, high = 5 * Y; ` `    ``int` `N = 0; ` `    ``while` `(low <= high)  ` `    ``{ ` `        ``int` `mid = (high + low) / 2; ` ` `  `        ``if` `(countFactor(5, mid) < Y)  ` `        ``{ ` `            ``low = mid + 1; ` `        ``} ` ` `  `        ``else` `        ``{ ` `            ``N = mid; ` `            ``high = mid - 1; ` `        ``} ` `    ``} ` ` `  `    ``return` `N; ` `} ` ` `  `// Driver code ` `static` `void` `Main() ` `{ ` `    ``int` `Y = 10; ` ` `  `    ``System.Console.WriteLine(findSmallestX(Y)); ` `} ` `} ` ` `  `// This code is contributed by mits `

## PHP

 ` `

Output:

```45
```

My Personal Notes arrow_drop_up

Coder Machine Learner Social Activist Vocalist

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.