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

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

**Examples:**

Input:arr[] = {2, 2, 3}

Output:6

All possible sub-sets are {2}, {2}, {2, 2}, {2, 3}, {2, 3} and {2, 2, 3}

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

Output:0

**Approach:** We already know that :

- 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. **(2 ^{n} – 1) – (2^{totalOdd} – 1)**

Below is the implementation of the above approach:

## C++

`// C++ implementation of above approach ` ` ` `#include <iostream> ` `#include<bits/stdc++.h> ` ` ` `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; ` `} ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

## 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) ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP implementation of above approach ` ` ` `// Function to find total number of subsets ` `// in which product of the elements is even ` `function` `find(&` `$a` `, ` `$n` `) ` `{ ` ` ` `$count_odd` `= 0; ` ` ` ` ` `for` `(` `$i` `= 0; ` `$i` `< ` `$n` `; ` `$i` `++) ` ` ` `{ ` ` ` `// counting number of odds elements ` ` ` `if` `(` `$i` `% 2 != 0) ` ` ` `$count_odd` `+= 1; ` ` ` `} ` ` ` ` ` `$result` `= pow(2, ` `$n` `) - 1 ; ` ` ` `$result` `-= (pow(2, ` `$count_odd` `) - 1) ; ` ` ` `echo` `$result` `.` `"\n"` `; ` ` ` `} ` ` ` `// Driver code ` ` ` `$a` `= ` `array` `(2, 2, 3) ; ` `$n` `= sizeof(` `$a` `)/sizeof(` `$a` `[0]) ; ` ` ` `// function calling ` `find(` `$a` `,` `$n` `); ` ` ` `return` `0; ` ` ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

6

## Recommended Posts:

- Number of subsets with product less than k
- Minimum number of subsets with distinct elements
- Product of Primes of all Subsets
- Maximum and Minimum Product Subsets
- Product of all the elements in an array divisible by a given number K
- Maximum product from array such that frequency sum of all repeating elements in product is less than or equal to 2 * k
- Sum of maximum elements of all subsets
- Maximum difference between two subsets of m elements
- Count subarrays having total distinct elements same as original array
- Partition an array of non-negative integers into two subsets such that average of both the subsets is equal
- Number of subsets with zero sum
- Count number of subsets having a particular XOR value
- Number of subsets with sum divisible by m
- Number of distinct subsets of a set
- Count number of subsets whose median is also present in the same subset

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.