 Open in App
Not now

# Numbers whose factorials end with n zeros

• Difficulty Level : Medium
• Last Updated : 14 Feb, 2023

Given an integer n, we need to find the number of positive integers whose factorial ends with n zeros.
Examples:

```Input : n = 1
Output : 5 6 7 8 9
Explanation: Here, 5! = 120, 6! = 720,
7! = 5040, 8! = 40320 and 9! = 362880.

Input : n = 2
Output : 10 11 12 13 14
```

Prerequisite : Trailing zeros in factorial.
Naive approach:We can just iterate through the range of integers and find the number of trailing zeros of all the numbers and print the numbers with n trailing zeros.
Efficient Approach:In this approach we use binary search. Use binary search for all the numbers in the range and get the first number with n trailing zeros. Find all the numbers with m trailing zeros after that number.

## C++

 `// Binary search based CPP program to find` `// numbers with n trailing zeros.` `#include ` `using` `namespace` `std;`   `// Function to calculate trailing zeros` `int` `trailingZeroes(``int` `n)` `{` `    ``int` `cnt = 0;` `    ``while` `(n > 0) {` `        ``n /= 5;` `        ``cnt += n;` `    ``}` `    ``return` `cnt;` `}`   `void` `binarySearch(``int` `n)` `{` `    ``int` `low = 0;` `    ``int` `high = 1e6; ``// range of numbers`   `    ``// binary search for first number with ` `    ``// n trailing zeros` `    ``while` `(low < high) {` `        ``int` `mid = (low + high) / 2;` `        ``int` `count = trailingZeroes(mid);` `        ``if` `(count < n)` `            ``low = mid + 1;` `        ``else` `            ``high = mid;` `    ``}`   `    ``// Print all numbers after low with n` `    ``// trailing zeros.` `    ``vector<``int``> result;` `    ``while` `(trailingZeroes(low) == n) {` `        ``result.push_back(low);` `        ``low++;` `    ``}`   `    ``// Print result` `    ``for` `(``int` `i = 0; i < result.size(); i++) ` `        ``cout << result[i] << ``" "``;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `n = 2;` `    ``binarySearch(n);` `    ``return` `0;` `}`

## Java

 `// Binary search based Java ` `// program to find numbers ` `// with n trailing zeros.` `import` `java.io.*;`   `class` `GFG {`   `    ``// Function to calculate ` `    ``// trailing zeros` `    ``static` `int` `trailingZeroes(``int` `n)` `    ``{` `        ``int` `cnt = ``0``;` `        ``while` `(n > ``0``) ` `        ``{` `            ``n /= ``5``;` `            ``cnt += n;` `        ``}` `        ``return` `cnt;` `    ``}`   `    ``static` `void` `binarySearch(``int` `n)` `    ``{` `        ``int` `low = ``0``;` `        `  `        ``// range of numbers` `        ``int` `high = ``1000000``;`   `        ``// binary search for first number ` `        ``// with n trailing zeros` `        ``while` `(low < high) {` `            ``int` `mid = (low + high) / ``2``;` `            ``int` `count = trailingZeroes(mid);` `            ``if` `(count < n)` `                ``low = mid + ``1``;` `            ``else` `                ``high = mid;` `        ``}`   `        ``// Print all numbers after low ` `        ``// with n trailing zeros.` `        ``int` `result[] = ``new` `int``[``1000``];` `        ``int` `k = ``0``;` `        ``while` `(trailingZeroes(low) == n) {` `            ``result[k] = low;` `            ``k++;` `            ``low++;` `        ``}`   `        ``// Print result` `        ``for` `(``int` `i = ``0``; i < k; i++)` `            ``System.out.print(result[i] + ``" "``);` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `main(String args[])` `    ``{` `        ``int` `n = ``3``;` `        ``binarySearch(n);` `    ``}` `}`   `// This code is contributed ` `// by Nikita Tiwari.`

## Python3

 `# Binary search based Python3 code to find` `# numbers with n trailing zeros.`   `# Function to calculate trailing zeros` `def` `trailingZeroes( n ):` `    ``cnt ``=` `0` `    ``while` `n > ``0``:` `        ``n ``=``int``(n``/``5``)` `        ``cnt ``+``=` `n` `    ``return` `cnt`   `def` `binarySearch( n ):` `    ``low ``=` `0` `    ``high ``=` `1e6`  `# range of numbers` `    `  `    ``# binary search for first number with` `    ``# n trailing zeros` `    ``while` `low < high:` `        ``mid ``=` `int``((low ``+` `high) ``/` `2``)` `        ``count ``=` `trailingZeroes(mid)` `        ``if` `count < n:` `            ``low ``=` `mid ``+` `1` `        ``else``:` `            ``high ``=` `mid` `            `  `    ``# Print all numbers after low with n` `    ``# trailing zeros.` `    ``result ``=` `list``()` `    ``while` `trailingZeroes(low) ``=``=` `n:` `        ``result.append(low)` `        ``low``+``=``1` `    `  `    ``# Print result` `    ``for` `i ``in` `range``(``len``(result)):` `        ``print``(result[i],end``=``" "``)`   `# Driver code` `n ``=` `2` `binarySearch(n)`   `# This code is contributed by "Sharad_Bhardwaj".`

## C#

 `// Binary search based C# ` `// program to find numbers ` `// with n trailing zeros.` `using` `System;`   `class` `GFG {`   `    ``// Function to calculate ` `    ``// trailing zeros` `    ``static` `int` `trailingZeroes(``int` `n)` `    ``{` `        ``int` `cnt = 0;` `        `  `        ``while` `(n > 0) ` `        ``{` `            ``n /= 5;` `            ``cnt += n;` `        ``}` `        `  `        ``return` `cnt;` `    ``}`   `    ``static` `void` `binarySearch(``int` `n)` `    ``{` `        ``int` `low = 0;` `        `  `        ``// range of numbers` `        ``int` `high = 1000000;`   `        ``// binary search for first number ` `        ``// with n trailing zeros` `        ``while` `(low < high) {` `            ``int` `mid = (low + high) / 2;` `            ``int` `count = trailingZeroes(mid);` `            `  `            ``if` `(count < n)` `                ``low = mid + 1;` `            ``else` `                ``high = mid;` `        ``}`   `        ``// Print all numbers after low ` `        ``// with n trailing zeros.` `        ``int` `[]result = ``new` `int``;` `        ``int` `k = 0;` `        ``while` `(trailingZeroes(low) == n) {` `            ``result[k] = low;` `            ``k++;` `            ``low++;` `        ``}`   `        ``// Print result` `        ``for` `(``int` `i = 0; i < k; i++)` `            ``Console.Write(result[i] + ``" "``);` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int` `n = 2;` `        `  `        ``binarySearch(n);` `    ``}` `}`   `// This code is contributed by vt_m.`

## PHP

 ` 0) ` `    ``{` `        ``\$n` `= ``intval``(``\$n` `/ 5);` `        ``\$cnt` `+= ``\$n``;` `    ``}` `    ``return` `\$cnt``;` `}`   `function` `binarySearch(``\$n``)` `{` `    ``\$low` `= 0;` `    ``\$high` `= 1e6; ``// range of numbers`   `    ``// binary search for first number ` `    ``// with n trailing zeros` `    ``while` `(``\$low` `< ``\$high``)` `    ``{` `        ``\$mid` `= ``intval``((``\$low` `+ ``\$high``) / 2);` `        ``\$count` `= trailingZeroes(``\$mid``);` `        ``if` `(``\$count` `< ``\$n``)` `            ``\$low` `= ``\$mid` `+ 1;` `        ``else` `            ``\$high` `= ``\$mid``;` `    ``}`   `    ``// Print all numbers after low with n` `    ``// trailing zeros.` `    ``\$result` `= ``array``();` `    ``while` `(trailingZeroes(``\$low``) == ``\$n``)` `    ``{` `        ``array_push``(``\$result``, ``\$low``);` `        ``\$low``++;` `    ``}`   `    ``// Print result` `    ``for` `(``\$i` `= 0; ` `         ``\$i` `< sizeof(``\$result``); ``\$i``++) ` `        ``echo` `\$result``[``\$i``] . ``" "``;` `}`   `// Driver code` `\$n` `= 2;` `binarySearch(``\$n``);`   `// This code is contributed by Ita_c` `?>`

## Javascript

 ``

Output:

`10 11 12 13 14 `

Time Complexity: O(log(m)). Here m=1e6

Auxiliary Space: O(k) where k is the number of trailing zeros.

My Personal Notes arrow_drop_up
Related Articles