Related Articles
Check if given number is a power of d where d is a power of 2
• Last Updated : 03 Nov, 2018

Given an integer n, find whether it is a power of d or not, where d is itself a power of 2.

Examples:

```Input : n = 256, d = 16
Output : Yes

Input : n = 32, d = 16
Output : No
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Method 1 Take log of the given number on base d, and if we get an integer then number is power of d.

Method 2 Keep dividing the number by d, i.e, do n = n/d iteratively. In any iteration, if n%d becomes non-zero and n is not 1 then n is not a power of d, otherwise n is a power of d.

Method 3(Bitwise)
A number n is a power of d if following conditions are met.
a) There is only one bit set in the binary representation of n (Note : d is a power of 2)
b) The count of zero bits before the (only) set bit is a multiple of log2(d).

For example: For n = 16 (10000) and d = 4, 16 is a power of 4 because there is only one bit set and count of 0s before the set bit is 4 which is a multiple of log2(4).

## C++

 `// CPP program to find if a number is power ` `// of d where d is power of 2. ` `#include ` ` `  `unsigned ``int` `Log2n(unsigned ``int` `n) ` `{ ` `return` `(n > 1)? 1 + Log2n(n/2): 0; ` `} ` ` `  `bool` `isPowerOfd(unsigned ``int` `n, unsigned ``int` `d) ` `{ ` `int` `count = 0; ` ` `  `/* Check if there is only one bit set in n*/` `if` `(n && !(n&(n-1)) ) ` `{ ` `    ``/* count 0 bits before set bit */` `    ``while` `(n > 1) ` `    ``{ ` `    ``n >>= 1; ` `    ``count += 1; ` `    ``}      ` ` `  `    ``/* If count is a multiple of log2(d)  ` `    ``then return true else false*/` `    ``return` `(count%(Log2n(d)) == 0); ` `} ` ` `  `/* If there are more than 1 bit set ` `    ``then n is not a power of 4*/` `return` `false``; ` `}  ` ` `  `/* Driver program to test above function*/` `int` `main() ` `{ ` `int` `n = 64, d = 8; ` `if` `(isPowerOfd(n, d)) ` `    ``printf``(``"%d is a power of %d"``, n, d); ` `else` `    ``printf``(``"%d is not a power of %d"``, n, d); ` `return` `0; ` `} `

## Java

 `// Java program to find if ` `// a number is power of d ` `// where d is power of 2. ` ` `  `class` `GFG ` `{ ` `static` `int` `Log2n(``int` `n) ` `{ ` `    ``return` `(n > ``1``)? ``1` `+  ` `    ``Log2n(n / ``2``): ``0``; ` `} ` ` `  `static` `boolean` `isPowerOfd(``int` `n,  ` `                        ``int` `d) ` `{ ` `int` `count = ``0``; ` ` `  `/* Check if there is  ` `only one bit set in n*/` `if` `(n > ``0` `&& (n &  ` `(n - ``1``)) == ``0``) ` `{  ` `    ``/* count 0 bits  ` `    ``before set bit */` `    ``while` `(n > ``1``) ` `    ``{ ` `        ``n >>= ``1``; ` `        ``count += ``1``; ` `    ``}  ` ` `  `    ``/* If count is a multiple  ` `    ``of log2(d) then return  ` `    ``true else false*/` `    ``return` `(count %  ` `        ``(Log2n(d)) == ``0``); ` `} ` ` `  `/* If there are more  ` `than 1 bit set then  ` `n is not a power of 4*/` `return` `false``; ` `}  ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `n = ``64``, d = ``8``; ` `    ``if` `(isPowerOfd(n, d)) ` `        ``System.out.println(n +  ` `                    ``" is a power of "` `+ d); ` `    ``else` `        ``System.out.println(n +  ` `                    ``" is not a power of "` `+ d); ` `} ` `} ` ` `  `// This code is contributed by mits `

## Python3

 `# Python3 program to find if a number ` `# is power of d where d is power of 2. ` ` `  `def` `Log2n(n): ` `    ``return` `(``1` `+` `Log2n(n ``/` `2``)) ``if` `(n > ``1``) ``else` `0``; ` ` `  `def` `isPowerOfd(n, d): ` `    ``count ``=` `0``; ` `     `  `    ``# Check if there is only  ` `    ``# one bit set in n ` `     `  `    ``if` `(n ``and` `(n & (n ``-` `1``))``=``=``0``): ` `        ``# count 0 bits  ` `        ``# before set bit  ` `        ``while` `(n > ``1``): ` `            ``n >>``=` `1``; ` `            ``count ``+``=` `1``; ` `        ``# If count is a multiple of log2(d)  ` `        ``# then return true else false  ` `        ``return` `(count``%``(Log2n(d)) ``=``=` `0``); ` ` `  `    ``# If there are more than 1 bit set ` `    ``# then n is not a power of 4 ` `    ``return` `False``; ` ` `  `# Driver Code ` `n ``=` `64``; ` `d ``=` `8``; ` `if` `(isPowerOfd(n, d)): ` `    ``print``(n,``"is a power of"``,d); ` `else``: ` `    ``print``(n,``"is not a power of"``,d); ` ` `  `# This code is contributed by mits `

## C#

 `// C# program to find if ` `// a number is power of d ` `// where d is power of 2. ` `using` `System; ` ` `  `class` `GFG ` `{ ` `static` `int` `Log2n(``int` `n) ` `{ ` `    ``return` `(n > 1)? 1 +  ` `    ``Log2n(n / 2): 0; ` `} ` ` `  `static` `bool` `isPowerOfd(``int` `n,  ` `                    ``int` `d) ` `{ ` `int` `count = 0; ` ` `  `/* Check if there is  ` `only one bit set in n*/` `if` `(n > 0 && (n & (n - 1)) == 0) ` `{  ` `    ``/* count 0 bits  ` `    ``before set bit */` `    ``while` `(n > 1) ` `    ``{ ` `    ``n >>= 1; ` `    ``count += 1; ` `    ``}  ` ` `  `    ``/* If count is a multiple  ` `    ``of log2(d) then return  ` `    ``true else false*/` `    ``return` `(count % (Log2n(d)) == 0); ` `} ` ` `  `/* If there are more than  ` `1 bit set then n is not ` `a power of 4*/` `return` `false``; ` `}  ` ` `  `// Driver Code ` `static` `void` `Main() ` `{ ` `int` `n = 64, d = 8; ` `if` `(isPowerOfd(n, d)) ` `    ``Console.WriteLine(``"{0} is a "` `+  ` `                    ``"power of {1}"``,  ` `                            ``n, d); ` `else` `    ``Console.WriteLine(``"{0} is not a"``+ ` `                    ``" power of {1}"``,  ` `                            ``n, d); ` `} ` ` `  `// This code is contributed by mits ` `} `

## PHP

 ` 1)? 1 +  ` `    ``Log2n(``\$n` `/ 2): 0; ` `} ` ` `  `function` `isPowerOfd(``\$n``, ``\$d``) ` `{ ` `    ``\$count` `= 0; ` ` `  `// Check if there is only  ` `// one bit set in n ` `if` `(``\$n` `&& !(``\$n` `& (``\$n` `- 1))) ` `{ ` `     `  `    ``// count 0 bits  ` `    ``// before set bit  ` `    ``while` `(``\$n` `> 1) ` `    ``{ ` `        ``\$n` `>>= 1; ` `        ``\$count` `+= 1; ` `    ``}  ` ` `  `    ``/* If count is a multiple of log2(d)  ` `    ``then return true else false*/` `    ``return` `(``\$count``%(Log2n(``\$d``)) == 0); ` `} ` ` `  `    ``/* If there are more than 1 bit set ` `    ``then n is not a power of 4*/` `    ``return` `false; ` `}  ` ` `  `// Driver Code ` `\$n` `= 64; ` `\$d` `= 8; ` `if` `(isPowerOfd(``\$n``, ``\$d``)) ` `    ``echo` `\$n``,``" "``,``"is a power of "``, ``\$d``; ` `else` `    ``echo` `\$n``,``" "``,``"is not a power of "``, ``\$d``; ` ` `  `// This code is contributed by m_kit ` `?> `

Output:

```64 is a power of 8
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :