Related Articles
Smallest power of 2 consisting of N digits
• Last Updated : 01 Jun, 2021

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

 `// C++ Program to implement``// the above approach` `#include ``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

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

 `# 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#

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

## Javascript

 ``
Output:
`10`

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

 `// C++ Program of the``// above approach` `#include ``using` `namespace` `std;` `// Function to return smallest``// power of 2 consisting of N digits``int` `smallestNum(``int` `n)``{``    ``float` `power = log2(10);``  ``cout<

## Java

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

 `# 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#

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

## Javascript

 ``
Output:
`10`

Time Complexity: O(1)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up