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

Last Updated : 22 Feb, 2023

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

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

## C++

 `// CPP program to find if a number is power` `// of d where d is power of 2.` `#include`     `bool` `isPowerOfd(``int` `n, ``int` `d)` `{` `  ``//Take log of the given number on base d, ` `  ``//and if we get an integer then number is power of d.` `  `  `    ``return` `((``int``)(``log``(n) /``log``(d)) == (``int``)``log``(n) / (``int``)``log``(d));`   `} `   `/* 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;` `}`

## Python3

 `#Python3 program to find if a number is power` `# of d where d is power of 2.`   `from` `math ``import` `log`   `def` `isPowerOfd(n, d):`   `  ``#Take log of the given number on base d, ` `  ``#and if we get an integer then number is power of d.` `  ``return` `log(n) ``/` `log(d) ``=``=` `log(n) ``/``/` `log(d)`     `# Driver program to test above function*` `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 phasing17`

## Java

 `public` `class` `Main {` `  `  `  ``public` `static` `boolean` `isPowerOfd(``int` `n, ``int` `d) {` `    ``//Take log of the given number on base d, ` `    ``//and if we get an integer then number is power of d.` `    ``return` `(Math.log(n) / Math.log(d) == (``int``) (Math.log(n) / Math.log(d)));` `  ``}`   `  ``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);` `  ``}` `}`

## C#

 `using` `System;`   `public` `class` `Mainn {` `    ``public` `static` `bool` `IsPowerOfd(``int` `n, ``int` `d) {` `        ``//Take log of the given number on base d, ` `        ``//and if we get an integer then number is power of d.` `        ``return` `(Math.Log(n) / Math.Log(d) == (``int``) (Math.Log(n) / Math.Log(d)));` `    ``}`   `    ``public` `static` `void` `Main(``string``[] args) {` `        ``int` `n = 64, d = 8;` `        ``if` `(IsPowerOfd(n, d))` `            ``Console.WriteLine(n + ``" is a power of "` `+ d);` `        ``else` `            ``Console.WriteLine(n + ``" is not a power of "` `+ d);` `    ``}` `}`

## Javascript

 `// JavaScript program to find if a number is power` `// of d where d is power of 2.`   `function` `isPowerOfd(n, d)` `{` `  ``//Take log of the given number on base d, ` `  ``//and if we get an integer then number is power of d.` `  `  `    ``return` `(Math.floor((Math.log(n) / Math.log(d)))) == (Math.log(n) /Math.log(d));`   `} `   `/* Driver program to test above function*/` `let n = 64, d = 8;` `if` `(isPowerOfd(n, d))` `    ``console.log(n + ``" is a power of "` `+ d);` `else` `    ``console.log(n + ``" is not a power of "` `+ d);`     `//This code is contributed by phasing17`

Output

`64 is a power of 8`

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).

Steps to solve this problem:

1. declare variable count=0.

2. check if n&&!(n&(n-1)) is true than :

*while n is greater than 1:

*n>>=1.

*update count to count+1.

*return count%(log2n(d))==0.

3. return false.

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

## Javascript

 ``

Output

`64 is a power of 8`

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