# Occurrences of a pattern in binary representation of a number

Given a string pat and an integer N, the task is to find the number of occurrences of the pattern pat in binary representation of N.

Examples:

Input: N = 2, pat = “101”
Output: 0
Pattern “101” doesn’t occur in the binary representation of 2 (10).

Input: N = 10, pat = “101”
Output: 1
Binary representation of 10 is 1010 and the given pattern occurs only once.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive Approach: Convert the number into its binary string representation and then use a pattern matching algorithm to check the number of times the pattern has occurred in the binary representation.

Efficient Approach:

1. Convert the binary pattern into it’s decimal representation.
2. Take an integer all_ones, whose binary representation consists of all set bits (equal to the number of bits in the pattern).
3. Performing N & all_ones now will leave only the last k bits unchanged (others will be 0) where k is the number of bits in the pattern.
4. Now if N = pattern, it means that N contained the pattern in the end in its binary representation. So update count = count + 1.
5. Right shift N by 1 and repeat the previous two steps until N ≥ pattern & N > 0.
6. Print the count in the end.

Below is the implementation of the above approach:

## C++

 // C++ program to find the number of times // pattern p occurred in binary representation // on n. #include using namespace std;    // Function to return the count of occurrence // of pat in binary representation of n int countPattern(int n, string pat) {     // To store decimal value of the pattern     int pattern_int = 0;        int power_two = 1;        // To store a number that has all ones in     // its binary representation and length     // of ones equal to length of the pattern     int all_ones = 0;        // Find values of pattern_int and all_ones     for (int i = pat.length() - 1; i >= 0; i--) {         int current_bit = pat[i] - '0';         pattern_int += (power_two * current_bit);         all_ones = all_ones + power_two;         power_two = power_two * 2;     }        int count = 0;     while (n && n >= pattern_int) {            // If the pattern occurs in the last         // digits of n         if ((n & all_ones) == pattern_int) {             count++;         }            // Right shift n by 1 bit         n = n >> 1;     }     return count; }    // Driver code int main() {     int n = 500;     string pat = "10";     cout << countPattern(n, pat); }

## Java

 // Java program to find the number of times // pattern p occurred in binary representation // on n. import java.util.*;    class solution {    // Function to return the count of occurrence // of pat in binary representation of n static int countPattern(int n, String pat) {     // To store decimal value of the pattern     int pattern_int = 0;        int power_two = 1;        // To store a number that has all ones in     // its binary representation and length     // of ones equal to length of the pattern     int all_ones = 0;        // Find values of pattern_int and all_ones     for (int i = pat.length() - 1; i >= 0; i--) {         int current_bit = pat.charAt(i) - '0';         pattern_int += (power_two * current_bit);         all_ones = all_ones + power_two;         power_two = power_two * 2;     }        int count = 0;     while (n!=0 && n >= pattern_int) {            // If the pattern occurs in the last         // digits of n         if ((n & all_ones) == pattern_int) {             count++;         }            // Right shift n by 1 bit         n = n >> 1;     }     return count; }    // Driver code public static void main(String args[]) {     int n = 500;     String pat = "10";     System.out.println(countPattern(n, pat)); } }

## Python3

# Python 3 program to find the number of times
# pattern p occurred in binary representation
# on n.

# Function to return the count of occurrence
# of pat in binary representation of n
def countPattern(n, pat):

# To store decimal value of the pattern
pattern_int = 0

power_two = 1

# To store a number that has all ones in
# its binary representation and length
# of ones equal to length of the pattern
all_ones = 0

# Find values of pattern_int and all_ones
i = len(pat) – 1
while(i >= 0):
current_bit = ord(pat[i]) – ord(‘0’)
pattern_int += (power_two * current_bit)
all_ones = all_ones + power_two
power_two = power_two * 2
i -= 1

count = 0
while (n != 0 and n >= pattern_int):

# If the pattern occurs in the last
# digits of n
if ((n & all_ones) == pattern_int):
count += 1

# Right shift n by 1 bit
n = n >> 1

return count

# Driver code
if __name__ == ‘__main__’:
n = 500
pat = “10”
print(countPattern(n, pat))

# This code is contributed by
# Surendra_Gangwar

## C#

 // C# program to find the number of times  // pattern p occurred in binary representation  // on n.  using System ;    class GFG  {     // Function to return the count of occurrence  // of pat in binary representation of n  static int countPattern(int n, string pat)  {      // To store decimal value of the pattern      int pattern_int = 0;         int power_two = 1;         // To store a number that has all ones in      // its binary representation and length      // of ones equal to length of the pattern      int all_ones = 0;         // Find values of pattern_int and all_ones      for (int i = pat.Length - 1; i >= 0; i--)      {          int current_bit = pat[i] - '0';          pattern_int += (power_two * current_bit);          all_ones = all_ones + power_two;          power_two = power_two * 2;      }         int count = 0;      while (n != 0 && n >= pattern_int)      {             // If the pattern occurs in the last          // digits of n          if ((n & all_ones) == pattern_int)          {              count++;          }             // Right shift n by 1 bit          n = n >> 1;      }      return count;  }     // Driver code  public static void Main()  {      int n = 500;      string pat = "10";      Console.WriteLine(countPattern(n, pat));  }  }     // This code is contributed by Ryuga

Output:

2

My Personal Notes arrow_drop_up