Total number of subsets in which the product of the elements is even

• Last Updated : 09 Sep, 2022

Given an array arr[] of integer elements, the task is to find the total number of sub-sets of arr[] in which the product of the elements is even.

Examples:

Input: arr[] = {2, 2, 3}
Output:
All possible sub-sets are {2}, {2}, {2, 2}, {2, 3}, {2, 3} and {2, 2, 3}

Input: arr[] = {3, 3, 3}
Output: 6

• Even * Even = Even
• Odd * Even = Even
• Odd * Odd = Odd

Now, we need to count the total subsets in which at least a single even element is present in order for the product of the elements to be even.
Now, Total number of sub-sets having at least one even element = Total possible sub-sets of n – Total sub-sets having all odd elements
i.e. (2n – 1) – (2totalOdd – 1)

Below is the implementation of the above approach:

C++

 `// C++ implementation of above approach` `#include ``#include` `using` `namespace` `std;` `// Function to find total number of subsets``// in which product of the elements is even``void` `find(``int` `a[], ``int` `n)``{``    ``int` `count_odd = 0;``    ` `    ``for``(``int` `i = 0; i < n ; i++)``    ``{``        ``// counting number of odds elements``        ``if` `(i % 2 != 0)``        ``count_odd += 1;``    ``}` `    ``int` `result = ``pow``(2, n) - 1 ;``    ``result -= (``pow``(2, count_odd) - 1) ;``    ``cout << result << endl;``    ` `}` `// Driver code``int` `main()``{``   ``int` `a[] = {2, 2, 3} ;``   ``int` `n = ``sizeof``(a)/``sizeof``(a[0]) ;``   ` `   ``// function calling``   ``find(a,n);``   ` `   ``return` `0;``   ``// This code is contributed by ANKITRAI1;``}`

Java

 `// Java implementation of above approach` `class` `GFG {` `// Function to find total number of subsets``// in which product of the elements is even``    ``static` `void` `find(``int` `a[], ``int` `n) {``        ``int` `count_odd = ``0``;` `        ``for` `(``int` `i = ``0``; i < n; i++) {``            ``// counting number of odds elements``            ``if` `(i % ``2` `!= ``0``) {``                ``count_odd += ``1``;``            ``}``        ``}` `        ``int` `result = (``int``) (Math.pow(``2``, n) - ``1``);``        ``result -= (Math.pow(``2``, count_odd) - ``1``);``        ``System.out.println(result);` `    ``}` `// Driver code``    ``public` `static` `void` `main(String[] args) {``        ``int` `a[] = {``2``, ``2``, ``3``};``        ``int` `n = a.length;` `// function calling``        ``find(a, n);` `    ``}``}``//this code contributed by 29AJayKumar`

Python3

 `# Python3 implementation of above approach``import` `math as ma` `# Function to find total number of subsets``# in which product of the elements is even``def` `find(a):``    ``count_odd ``=` `0``    ``for` `i ``in` `a:` `        ``# counting number of odds elements``        ``if``(i ``%` `2` `!``=` `0``):``            ``count_odd``+``=` `1` `    ``result ``=` `pow``(``2``, ``len``(a)) ``-` `1``    ``result ``=` `result ``-` `(``pow``(``2``, count_odd) ``-` `1``)``    ``print``(result)` `# Driver code``a ``=``[``2``, ``2``, ``3``]``find(a)`

C#

 `    ` `// C# implementation of above approach``using` `System;``public` `class` `GFG {`` ` `// Function to find total number of subsets``// in which product of the elements is even``    ``static` `void` `find(``int` `[]a, ``int` `n) {``        ``int` `count_odd = 0;`` ` `        ``for` `(``int` `i = 0; i < n; i++) {``            ``// counting number of odds elements``            ``if` `(i % 2 != 0) {``                ``count_odd += 1;``            ``}``        ``}`` ` `        ``int` `result = (``int``) (Math.Pow(2, n) - 1);``        ``result -= (``int``)(Math.Pow(2, count_odd) - 1);``        ``Console.Write(result);`` ` `    ``}`` ` `// Driver code``    ``public` `static` `void` `Main() {``        ``int` `[]a = {2, 2, 3};``        ``int` `n = a.Length;`` ` `// function calling``        ``find(a, n);`` ` `    ``}``}``//this code contributed by 29AJayKumar`

PHP

 ``

Javascript

 ``

Output

```6
```

My Personal Notes arrow_drop_up