Numbers whose factorials end with n zeros

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// Binary search based CPP program to find
// numbers with n trailing zeros.
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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".

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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[1000];
        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.

chevron_right


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 ?>


Output:

10 11 12 13 14 


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.