Given an integer N, the task is to find the smallest power of 2 which consists of N digits.
Examples:
Input: N = 3
Output: 7
Explanation:
27 = 128, which has three digits.Input: N = 4
Output: 10
Explanation:
210 = 1024, which has four digits.
Naive Approach: A simple solution is to iterate through all the powers of 2 starting from 20 and check for each power of 2, if it contains N digits or not. Print the first power of two which contains N digits.
Below is the implementation of the above approach:
// C++ Program to implement // the above approach #include <bits/stdc++.h> using namespace std;
// Function to return smallest // power of 2 with N digits int smallestNum( int n)
{ int res = 1;
// Iterate through all
// powers of 2
for ( int i = 2;; i *= 2) {
int length = log10 (i) + 1;
if (length == n)
return log (i) / log (2);
}
} // Driver Code int main()
{ int n = 4;
cout << smallestNum(n);
return 0;
} |
// Java program to implement // the above approach import java.io.*;
class GFG{
// Function to return smallest // power of 2 with N digits static int smallestNum( int n)
{ int res = 1 ;
// Iterate through all
// powers of 2
for ( int i = 2 ;; i *= 2 )
{
int length = ( int )(Math.log10(i)) + 1 ;
if (length == n)
return ( int )(Math.log(i) /
Math.log( 2 ));
}
} // Driver Code public static void main (String[] args)
{ int n = 4 ;
System.out.print(smallestNum(n));
} } // This code is contributed by code_hunt |
# Python3 program to implement # the above approach from math import log10, log
# Function to return smallest # power of 2 with N digits def smallestNum(n):
res = 1
# Iterate through all
# powers of 2
i = 2
while ( True ):
length = int (log10(i) + 1 )
if (length = = n):
return int (log(i) / / log( 2 ))
i * = 2
# Driver Code n = 4
print (smallestNum(n))
# This code is contributed by SHIVAMSINGH67 |
// C# program to implement // the above approach using System;
class GFG{
// Function to return smallest // power of 2 with N digits static int smallestNum( int n)
{ //int res = 1;
// Iterate through all
// powers of 2
for ( int i = 2;; i *= 2)
{
int length = ( int )(Math.Log10(i)) + 1;
if (length == n)
return ( int )(Math.Log(i) /
Math.Log(2));
}
} // Driver Code public static void Main ()
{ int n = 4;
Console.Write(smallestNum(n));
} } // This code is contributed by code_hunt |
<script> // Javascript Program to implement // the above approach // Function to return smallest // power of 2 with N digits function smallestNum(n)
{ res = 1;
// Iterate through all
// powers of 2
for ( var i = 2;; i *= 2) {
var length = parseInt(Math.log(i)/Math.log(10)) + 1;
if (length == n)
return parseInt(Math.log(i) / Math.log(2));
}
} // Driver Code n = 4; document.write(smallestNum(n)); </script> |
Output:
10
Time Complexity: O(log2n)
Auxiliary Space: O(1)
Efficient Approach: The key observation to optimize the above approach is that the smallest power of 2 with N digits can be obtained by the equation:
Below is the implementation of the above approach:
// C++ Program of the // above approach #include <bits/stdc++.h> using namespace std;
// Function to return smallest // power of 2 consisting of N digits int smallestNum( int n)
{ float power = log2(10);
cout<<power;
return ceil ((n - 1) * power);
} // Driver Code int main()
{ int n = 4;
cout << smallestNum(n);
return 0;
} |
// Java Program of the // above approach class GFG{
// Function to return smallest
// power of 2 consisting of N digits
static int smallestNum( int n)
{
double power = log2( 10 );
return ( int ) Math.ceil((n - 1 ) * power);
}
static double log2( int N)
{
// calculate log2 N indirectly
// using log() method
return (Math.log(N) / Math.log( 2 ));
} // Driver Code public static void main(String[] args)
{ int n = 4 ;
System.out.print(smallestNum(n));
} } // This code is contributed by Princi Singh |
# Python3 program of the # above approach from math import log2, ceil
# Function to return smallest # power of 2 with N digits def smallestNum(n):
power = log2( 10 )
print (power);
return ceil((n - 1 ) * power)
# Driver Code n = 4
print (smallestNum(n))
# This code is contributed by SHIVAMSINGH67 |
// C# program of the // above approach using System;
class GFG{
// Function to return smallest // power of 2 consisting of N digits static int smallestNum( int n)
{ double power = log2(10);
return ( int ) Math.Ceiling((n - 1) * power);
} static double log2( int N)
{ // calculate log2 N indirectly
// using log() method
return (Math.Log(N) / Math.Log(2));
} // Driver Code public static void Main()
{ int n = 4;
Console.Write(smallestNum(n));
} } // This code is contributed by Chitranayal |
<script> // JavaScript program for // the above approach // Function to return smallest
// power of 2 consisting of N digits
function smallestNum(n)
{
let power = log2(10);
return Math.ceil((n - 1) * power);
}
function log2(N)
{
// calculate log2 N indirectly
// using log() method
return (Math.log(N) / Math.log(2));
}
// Driver code let n = 4;
document.write(smallestNum(n));
// This code is contributed by splevel62.
</script> |
Output:
10
Time Complexity: O(1)
Auxiliary Space: O(1)