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

Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

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 <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;
}

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

<?php
// Binary search based PHP program to
// find numbers with n trailing zeros.

// Function to calculate trailing zeros
function 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
?>

Javascript

<script>

// Binary search based JavaScript program to find
// numbers with n trailing zeros.

// Function to calculate trailing zeros
function 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 code
var n = 2;
binarySearch(n);

</script>

Output:

10 11 12 13 14

My Personal Notes arrow_drop_up