 Open in App
Not now

# Numbers whose factorials end with n zeros

• Difficulty Level : Medium
• Last Updated : 22 Apr, 2021

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 `

My Personal Notes arrow_drop_up