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 = 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<bits/stdc++.h>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 logdef 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 = 64d = 8if (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 |
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<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 Codepublic 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 Coden = 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 nota power of 4*/return false;} // Driver Codestatic 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 nif ($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 2function 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 conditionsfunction 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 codevar 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> |
64 is a power of 8
Time Complexity: O(log2n)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



