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.
// 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;
} |
// 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 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". |
// 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 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 ?> |
<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
Time Complexity: O(log(m)). Here m=1e6
Auxiliary Space: O(k) where k is the number of trailing zeros.