# Check if given number is a power of d where d is a power of 2

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 = 16Output :YesInput :n = 32, d = 16Output :No

**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 log_{2}(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 log_{2}(4).

## C++

`// CPP program to find if a number is power` `// of d where d is power of 2.` `#include<stdio.h>` `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

`<?php` `// PHP program to find if a number` `// is power of d where d is power of 2.` `function` `Log2n(` `$n` `)` `{` ` ` `return` `(` `$n` `> 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` `?>` |

## Javascript

`<script>` `// Javascript program to find if` `// a number is power of d` `// where d is power of 2` `function` `Log2n(n)` `{` ` ` `return` `(n > 1) ? 1 +` ` ` `Log2n(n / 2) : 0;` `}` `// Function to count the number` `// of ways to paint N * 3 grid` `// based on given conditions` `function` `isPowerOfd(n, d)` `{` ` ` `var` `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` `var` `n = 64, d = 8;` `if` `(isPowerOfd(n, d))` ` ` `document.write(n +` ` ` `" is a power of "` `+ d);` `else` ` ` `document.write(n +` ` ` `" is not a power of "` `+ d);` `// This code is contributed by Khushboogoyal499` `</script>` |

**Output:**

64 is a power of 8

**Time Complexity: **O(log_{2}n)

**Auxiliary Space: **O(1)

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. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.