Related Articles
Count integers in an Array which are multiples their bits counts
• Last Updated : 07 May, 2020

Given an array arr[] of N elements, the task is to count all the elements which are a multiple of their set bits count.

Examples:

```Input : arr[] = { 1, 2, 3, 4, 5, 6 }
Output : 4
Explanation :
There numbers which are multiple of their setbits count are { 1, 2, 4, 6 }.

Input : arr[] = {10, 20, 30, 40}
Output : 3
Explanation :
There numbers which are multiple of their setbits count are { 10, 20, 40 }
```

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

Approach: Loop through each array elements one by one. Count the set bits of every number in the array. Check if the current integer is a multiple of its set bits count or not. If ‘yes’ then increment the counter by 1, else skip that integer.

Below is the implementation of above approach:

## C++

 `#include ``using` `namespace` `std;`` ` `// Function to find the count of numbers``// which are multiple of its set bits count``int` `find_count(vector<``int``>& arr)``{``    ``// variable to store count``    ``int` `ans = 0;`` ` `    ``// iterate over elements of array``    ``for` `(``int` `i : arr) {`` ` `        ``// Get the set-bits count of each element``        ``int` `x = __builtin_popcount(i);`` ` `        ``// Check if the setbits count``        ``// divides the integer i``        ``if` `(i % x == 0)`` ` `            ``// Increment the count``            ``// of required numbers by 1``            ``ans += 1;``    ``}`` ` `    ``return` `ans;``}`` ` `// Driver code``int` `main()``{``    ``vector<``int``> arr``        ``= { 1, 2, 3, 4, 5, 6 };`` ` `    ``cout << find_count(arr);`` ` `    ``return` `0;``}`

## Java

 `class` `GFG{``  ` `// Function to find the count of numbers``// which are multiple of its set bits count``static` `int` `find_count(``int` `[]arr)``{``    ``// variable to store count``    ``int` `ans = ``0``;``  ` `    ``// iterate over elements of array``    ``for` `(``int` `i : arr) {``  ` `        ``// Get the set-bits count of each element``        ``int` `x = Integer.bitCount(i);``  ` `        ``// Check if the setbits count``        ``// divides the integer i``        ``if` `(i % x == ``0``)``  ` `            ``// Increment the count``            ``// of required numbers by 1``            ``ans += ``1``;``    ``}``  ` `    ``return` `ans;``}``  ` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `[]arr``        ``= { ``1``, ``2``, ``3``, ``4``, ``5``, ``6` `};``  ` `    ``System.out.print(find_count(arr));``  ` `}``}`` ` `// This code contributed by Princi Singh`

## Python3

 `# Python3 implementation of above approach`` ` `# function to return set bits count``def` `bitsoncount(x):``    ``return` `bin``(x).count(``'1'``)`` ` `# Function to find the count of numbers ``# which are multiple of its set bits count ``def` `find_count(arr) :``    ``# variable to store count ``    ``ans ``=` `0` ` ` `    ``# iterate over elements of array ``    ``for` `i ``in` `arr :`` ` `        ``# Get the set-bits count of each element ``        ``x ``=` `bitsoncount(i)`` ` `        ``# Check if the setbits count ``        ``# divides the integer i ``        ``if` `(i ``%` `x ``=``=` `0``):`` ` `            ``# Increment the count ``            ``# of required numbers by 1 ``            ``ans ``+``=` `1`` ` `    ``return` `ans`` ` `# Driver code ``arr ``=` `[ ``1``, ``2``, ``3``, ``4``, ``5``, ``6` `]`` ` `print``(find_count(arr))`` ` `# This code is contributed by Sanjit_Prasad`

## C#

 `using` `System;`` ` `public` `class` `GFG{``   ` `// Function to find the count of numbers``// which are multiple of its set bits count``static` `int` `find_count(``int` `[]arr)``{``    ``// Variable to store count``    ``int` `ans = 0;``   ` `    ``// Iterate over elements of array``    ``foreach` `(``int` `i ``in` `arr) {``   ` `        ``// Get the set-bits count of each element``        ``int` `x = bitCount(i);``   ` `        ``// Check if the setbits count``        ``// divides the integer i``        ``if` `(i % x == 0)``   ` `            ``// Increment the count``            ``// of required numbers by 1``            ``ans += 1;``    ``}``   ` `    ``return` `ans;``}``static` `int` `bitCount(``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``        ``= { 1, 2, 3, 4, 5, 6 };``   ` `    ``Console.Write(find_count(arr));``   ` `}``}``// This code contributed by Princi Singh`

Output :
`4`

Time complexity:- O(nlog(max(arr[])), where n is the size of the array,
Space complexity:- O(1)

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for the language and STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up