Numbers whose factorials end with n zeros - GeeksforGeeks

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++
Java
Python3
C#
PHP
Javascript
// Binary search based CPP program to find// numbers with n trailing zeros.#include <bits/stdc++.h>using namespace std; // Function to calculate trailing zerosint 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 codeint main(){    int n = 2;    binarySearch(n);    return 0;}
// 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.
# Binary search based Python3 code to find# numbers with n trailing zeros. # Function to calculate trailing zerosdef 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 coden = 2binarySearch(n) # This code is contributed by "Sharad_Bhardwaj".
// 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.
<?php// Binary search based PHP program to// find numbers with n trailing zeros. // Function to calculate trailing zerosfunction trailingZeroes($n){    $cnt = 0;    while ($n > 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?>
<script> // Binary search based JavaScript program to find// numbers with n trailing zeros. // Function to calculate trailing zerosfunction trailingZeroes(n){    var cnt = 0;    while (n > 0) {        n = parseInt(n/5);        cnt += n;    }    return cnt;} function binarySearch(n){    var low = 0;    var high = 1e6; // range of numbers     // binary search for first number with    // n trailing zeros    while (low < high) {        var mid = parseInt((low + high) / 2);        var count = trailingZeroes(mid);        if (count < n)            low = mid + 1;        else            high = mid;    }     // Print all numbers after low with n    // trailing zeros.    var result = [];    while (trailingZeroes(low) == n) {        result.push(low);        low++;    }     // Print result    for (var i = 0; i < result.length; i++)        document.write( result[i] + " ");} // Driver codevar n = 2;binarySearch(n);  </script>
Output: 
10 11 12 13 14 
 
ukasp
rutvik_56
Binary Search
factorial
number-theory
Divide and Conquer
number-theory
Divide and Conquer
factorial
Binary Search
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for Tower of Hanoi
Divide and Conquer Algorithm | Introduction
Median of two sorted arrays of different sizes
Count number of occurrences (or frequency) in a sorted array
Divide and Conquer | Set 5 (Strassen's Matrix Multiplication)
Quick Sort vs Merge Sort
Closest Pair of Points using Divide and Conquer algorithm
Find a peak element
Maximum Subarray Sum using Divide and Conquer algorithm
Complexity Analysis of Binary Search