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

• Last Updated : 30 Jun, 2022

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`

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

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

My Personal Notes arrow_drop_up