Count of elements in an Array whose set bits are in a multiple of K

Given an array arr[] of N elements and an integer K, the task is to count all the elements whose number of set bits is a multiple of K.

Examples:

Input: arr[] = {1, 2, 3, 4, 5}, K = 2
Output: 2
Explanation:
Two numbers whose setbits count is multiple of 2 are {3, 5}.

Input: arr[] = {10, 20, 30, 40}, K = 4
Output: 1
Explanation:
There number whose setbits count is multiple of 4 is {30}.

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

Approach:

1. Traverse the numbers in the array one by one.
2. Count the set bits of every number in the array.
3. Check if the setbits count is a multiple of K or not.

Below is the implementation of the above approach:

C++

 `// C++ implementation of above approach ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to find the count of numbers ` `int` `find_count(vector<``int``> arr, ``int` `k) ` `{ ` ` `  `    ``int` `ans = 0; ` `    ``for` `(``int` `i : arr) { ` ` `  `        ``// Get the set-bits count of each element ` `        ``int` `x = __builtin_popcount(i); ` ` `  `        ``// Check if the setbits count ` `        ``// is divisible by K ` `        ``if` `(x % k == 0) ` ` `  `            ``// Increment the count ` `            ``// of required numbers by 1 ` `            ``ans += 1; ` `    ``} ` ` `  `    ``return` `ans; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``vector<``int``> arr = { 12, 345, 2, 68, 7896 }; ` `    ``int` `K = 2; ` ` `  `    ``cout << find_count(arr, K); ` ` `  `    ``return` `0; ` `} `

Java

 `// Java implementation of above approach ` ` `  `class` `GFG{ ` ` `  `// Function to find the count of numbers ` `static` `int` `find_count(``int` `[]arr, ``int` `k) ` `{ ` ` `  `    ``int` `ans = ``0``; ` `    ``for` `(``int` `i : arr) { ` ` `  `        ``// Get the set-bits count of each element ` `        ``int` `x = Integer.bitCount(i); ` ` `  `        ``// Check if the setbits count ` `        ``// is divisible by K ` `        ``if` `(x % k == ``0``) ` ` `  `            ``// Increment the count ` `            ``// of required numbers by 1 ` `            ``ans += ``1``; ` `    ``} ` ` `  `    ``return` `ans; ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `[]arr = { ``12``, ``345``, ``2``, ``68``, ``7896` `}; ` `    ``int` `K = ``2``; ` ` `  `    ``System.out.print(find_count(arr, K)); ` ` `  `} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Python3

 `# Python3 implementation of above approach  ` ` `  `# Function to count total set bits ` `def` `bitsoncount(x): ` `    ``return` `bin``(x).count(``'1'``) ` ` `  `# Function to find the count of numbers  ` `def` `find_count(arr, k) : ` ` `  `    ``ans ``=` `0` `    ``for` `i ``in` `arr: ` ` `  `        ``# Get the set-bits count of each element  ` `        ``x ``=` `bitsoncount(i) ` ` `  `        ``# Check if the setbits count  ` `        ``# is divisible by K  ` `        ``if` `(x ``%` `k ``=``=` `0``) : ` `            ``# Increment the count  ` `            ``# of required numbers by 1  ` `            ``ans ``+``=` `1` `    ``return` `ans ` ` `  `# Driver code  ` `arr ``=` `[ ``12``, ``345``, ``2``, ``68``, ``7896` `] ` `K ``=` `2` `print``(find_count(arr, K)) ` ` `  `# This code is contributed by Sanjit_Prasad `

C#

 `// C# implementation of above approach ` `using` `System; ` ` `  `class` `GFG{ ` ` `  `// Function to find the count of numbers ` `static` `int` `find_count(``int` `[]arr, ``int` `k) ` `{ ` `    ``int` `ans = 0; ` `    ``foreach``(``int` `i ``in` `arr) ` `    ``{ ` ` `  `        ``// Get the set-bits count of each element ` `        ``int` `x = countSetBits(i); ` ` `  `        ``// Check if the setbits count ` `        ``// is divisible by K ` `        ``if` `(x % k == 0)  ` `             `  `            ``// Increment the count ` `            ``// of required numbers by 1 ` `            ``ans += 1; ` `    ``} ` ` `  `    ``return` `ans; ` `} ` ` `  `static` `int` `countSetBits(``long` `x) ` `{ ` `    ``int` `setBits = 0; ` `    ``while` `(x != 0)  ` `    ``{ ` `        ``x = x & (x - 1); ` `        ``setBits++; ` `    ``} ` ` `  `    ``return` `setBits; ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``int` `[]arr = { 12, 345, 2, 68, 7896 }; ` `    ``int` `K = 2; ` ` `  `    ``Console.Write(find_count(arr, K)); ` `} ` `} ` `// This code is contributed by sapnasingh4991 `

Output:

```3
```

Time complexity: O(N * M), where N is the size of the array, and M is the bits count of the largest number in the array.
Auxiliary Space complexity: O(1)

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

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.