Related Articles

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

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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
}

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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 :