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

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

      
// 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


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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


Output:

6


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.