Related Articles

Related Articles

Prime Number of Set Bits in Binary Representation | Set 1
  • Difficulty Level : Expert
  • Last Updated : 21 Dec, 2018

Given two integers ‘L’ and ‘R’, write a program to find the total numbers that are having prime number of set bits in their binary representation in the range [L, R].
Examples:

Input  : l = 6, r = 10
Output : 4
Explanation  :
6  -> 110  (2 set bits, 2 is prime)
7  -> 111  (3 set bits, 3 is prime)
9  -> 1001 (2 set bits, 2 is prime)
10 -> 1010 (2 set bits, 2 is prime)
Hence count is 4

Input  : l = 10, r = 15
Output : 5
10 -> 1010 (2 set bits, 2 is prime)
11 -> 1011 (3 set bits, 3 is prime)
12 -> 1100 (2 set bits, 2 is prime)
13 -> 1101 (3 set bits, 3 is prime)
14 -> 1110 (3 set bits, 3 is prime)
Hence count is 5

Explanation: In this program we find a total number, that’s having prime number of set bit. so we use a CPP predefined function __builtin_popcount() these functions provide a total set bit in number. as well as be check the total bit’s is prime or not if prime we increase the counter these process repeat till given range.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to count total prime 
// number of set bits in given range
#include <bits/stdc++.h>
using namespace std;
  
bool isPrime(int n)
{
    // Corner cases
    if (n <= 1)  return false;
    if (n <= 3)  return true;
   
    // This is checked so that we can skip 
    // middle five numbers in below loop
    if (n%2 == 0 || n%3 == 0) return false;
   
    for (int i=5; i*i<=n; i=i+6)
        if (n%i == 0 || n%(i+2) == 0)
           return false;
   
    return true;
}
  
// count number, that contains prime number of set bit
int primeBitsInRange(int l, int r)
{
    // tot_bit store number of bit in number
    int tot_bit, count = 0;
  
    // iterate loop from l to r
    for (int i = l; i <= r; i++) {
  
        // use predefined function for finding 
        // set bit it is return number of set bit
        tot_bit = __builtin_popcount(i);
  
        // check tot_bit prime or, not
        if (isPrime(tot_bit))
            count++;
    }
    return count;
}
  
// Driven Program
int main()
{
    int l = 6, r = 10;    
    cout << primeBitsInRange(l, r);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to count total prime 
// number of set bits in given range
import java.lang.*;
  
class GFG{
static boolean isPrime(int n)
{
    // Corner cases
    if (n <= 1) return false;
    if (n <= 3) return true;
  
    // This is checked so that we can skip 
    // middle five numbers in below loop
    if (n%2 == 0 || n%3 == 0) return false;
  
    for (int i=5; i*i<=n; i=i+6)
        if (n%i == 0 || n%(i+2) == 0)
        return false;
  
    return true;
}
  
// count number, that contains prime number of set bit
static int primeBitsInRange(int l, int r)
{
    // tot_bit store number of bit in number
    int tot_bit, count = 0;
  
    // iterate loop from l to r
    for (int i = l; i <= r; i++) {
  
        // use predefined function for finding 
        // set bit it is return number of set bit
        tot_bit = Integer.bitCount(i);
  
        // check tot_bit prime or, not
        if (isPrime(tot_bit))
            count++;
    }
    return count;
}
  
// Driven Program
public static void main(String[] args)
{
    int l = 6, r = 10
    System.out.println(primeBitsInRange(l, r));
      
}
}
// This code is Contributed by mits

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to count total prime 
# number of set bits in given range
def isPrime(n):
  
    # Corner cases
    if (n <= 1): return False;
    if (n <= 3): return True;
  
    # This is checked so that we can skip 
    # middle five numbers in below loop
    if (n % 2 == 0 or n % 3 == 0):
        return False;
          
    i = 5;
    while (i * i <= n):
        if(n % i == 0 or n % (i + 2) == 0):
            return False;
        i = i + 6;
  
    return True;
  
# count number, that contains 
# prime number of set bit
def primeBitsInRange(l, r):
  
    # tot_bit store number of
    # bit in number
    count = 0;
  
    # iterate loop from l to r
    for i in range(l, r + 1):
  
        # use predefined function for finding 
        # set bit it is return number of set bit
        tot_bit = bin(i).count('1');
  
        # check tot_bit prime or, not
        if (isPrime(tot_bit)):
            count += 1;
  
    return count;
  
# Driver Code
l = 6
r = 10
print(primeBitsInRange(l, r));
  
# This code is contributed by mits

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to count total prime 
// number of set bits in given range 
  
class GFG{
      
    // To count the bits
static int BitCount(int n)
{
    int count = 0;
    while (n != 0)
    {
        count++;
        n &= (n - 1);
    }
      
    return count;
}
          
static bool isPrime(int n) 
    // Corner cases 
    if (n <= 1) return false
    if (n <= 3) return true
  
    // This is checked so that we can skip 
    // middle five numbers in below loop 
    if (n%2 == 0 || n%3 == 0) return false
  
    for (int i=5; i*i<=n; i=i+6) 
        if (n%i == 0 || n%(i+2) == 0) 
        return false
  
    return true
  
// count number, that contains prime number of set bit 
static int primeBitsInRange(int l, int r) 
    // tot_bit store number of bit in number 
    int tot_bit, count = 0; 
  
    // iterate loop from l to r 
    for (int i = l; i <= r; i++) { 
  
        // use predefined function for finding 
        // set bit it is return number of set bit 
        tot_bit = BitCount(i); 
  
        // check tot_bit prime or, not 
        if (isPrime(tot_bit)) 
            count++; 
    
    return count; 
  
// Driven Program 
public static void Main() 
    int l = 6, r = 10; 
    System.Console.WriteLine(primeBitsInRange(l, r)); 
      
// This code is Contributed by mits 

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to count total prime 
// number of set bits in given range
function BitCount($n)
{
    $count = 0;
    while ($n != 0)
    {
        $count++;
        $n &= ($n - 1);
    }
      
    return $count;
}
  
function isPrime($n)
{
    // Corner cases
    if ($n <= 1) return false;
    if ($n <= 3) return true;
  
    // This is checked so that we can skip 
    // middle five numbers in below loop
    if ($n % 2 == 0 || $n % 3 == 0)
        return false;
  
    for ($i = 5; $i * $i <= $n; $i = $i + 6)
        if ($n % $i == 0 || 
            $n % ($i + 2) == 0)
        return false;
  
    return true;
}
  
// count number, that contains 
// prime number of set bit
function primeBitsInRange($l, $r)
{
    // tot_bit store number of
    // bit in number
    $count = 0;
  
    // iterate loop from l to r
    for ($i = $l; $i <= $r; $i++)
    {
  
        // use predefined function for finding 
        // set bit it is return number of set bit
        $tot_bit = BitCount($i);
  
        // check tot_bit prime or, not
        if (isPrime($tot_bit))
            $count++;
    }
    return $count;
}
  
// Driver Code
$l = 6; 
$r = 10; 
echo primeBitsInRange($l, $r);
  
// This code is contributed by mits
?>

chevron_right


Output:

4

Time Complexity : Let’s n = (r-l)
so overall time complexity is N*sqrt(N)



We can optimize above solution using Sieve of Eratosthenes.

Prime Number of Set Bits in Binary Representation | Set 2

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 :