Skip to content
Related Articles

Related Articles

Count of K length subsequence whose product is even
  • Difficulty Level : Medium
  • Last Updated : 18 Aug, 2020

Given an array arr[] and an integer K, the task is to find number of non empty subsequence of length K from the given array arr of size N such that the product of subsequence is a even number.
Example:

Input: arr[] = [2, 3, 1, 7], K = 3 
Output:
Explanation: 
There are 3 subsequences of length 3 whose product is even number {2, 3, 1}, {2, 3, 7}, {2, 1, 7}. 

Input: arr[] = [2, 4], K = 1 
Output:
Explanation: 
There are 2 subsequence of length 1 whose product is even number {2} {4}. 

Approach:
To solve the problem mentioned above we have to find the total number of subsequence of length K and subtract the count of K length subsequence whose product is odd. 

  1. For making a product of the subsequence odd we must choose K numbers as odd.
  2. So the number of subsequences of length K whose product is odd is possibly finding k odd numbers, i.e., “o choose k” or _{k}^{o}\textrm{C}
    where o is the count of odd numbers in the subsequence.
  3. \text{So count of a subsequence with even product = } _{k}^{n}\textrm{C} - _{k}^{o}\textrm{C}
    where n and o is the count of total numbers and odd numbers respectively.

Below is the implementation of above program: 

C++




// C++ implementation to Count of K
// length subsequence whose
// Product is even
  
#include <bits/stdc++.h>
using namespace std;
  
int fact(int n);
  
// Function to calculate nCr
int nCr(int n, int r)
{
    if (r > n)
        return 0;
    return fact(n)
           / (fact(r)
              * fact(n - r));
}
  
// Returns factorial of n
int fact(int n)
{
    int res = 1;
    for (int i = 2; i <= n; i++)
        res = res * i;
    return res;
}
  
// Function for finding number
// of K length subsequences
// whose product is even number
int countSubsequences(
    int arr[], int n, int k)
{
    int countOdd = 0;
  
    // counting odd numbers in the array
    for (int i = 0; i < n; i++) {
        if (arr[i] & 1)
            countOdd++;
    }
    int ans = nCr(n, k)
              - nCr(countOdd, k);
  
    return ans;
}
  
// Driver code
int main()
{
  
    int arr[] = { 2, 4 };
    int K = 1;
  
    int N = sizeof(arr) / sizeof(arr[0]);
  
    cout << countSubsequences(arr, N, K);
  
    return 0;
}

Java




// Java implementation to count of K
// length subsequence whose product 
// is even
import java.util.*;
  
class GFG{
      
// Function to calculate nCr
static int nCr(int n, int r)
{
    if (r > n)
        return 0;
    return fact(n) / (fact(r) *
                      fact(n - r));
}
  
// Returns factorial of n
static int fact(int n)
{
    int res = 1;
    for(int i = 2; i <= n; i++)
        res = res * i;
          
    return res;
}
  
// Function for finding number
// of K length subsequences
// whose product is even number
static int countSubsequences(int arr[],
                             int n, int k)
{
    int countOdd = 0;
  
    // Counting odd numbers in the array
    for(int i = 0; i < n; i++)
    {
        if (arr[i] % 2 == 1)
            countOdd++;
    }
    int ans = nCr(n, k) - nCr(countOdd, k);
  
    return ans;
}
  
// Driver code
public static void main(String args[])
{
    int arr[] = { 2, 4 };
    int K = 1;
  
    int N = arr.length;
  
    System.out.println(countSubsequences(arr, N, K));
}
}
  
// This code is contributed by ANKITKUMAR34

Python3




# Python3 implementation to Count of K
# length subsequence whose
# Product is even
  
# Function to calculate nCr
def nCr(n, r):
      
    if (r > n):
        return 0
    return fact(n) // (fact(r) * 
                       fact(n - r))
  
# Returns factorial of n
def fact(n):
      
    res = 1
    for i in range(2, n + 1):
        res = res * i
          
    return res
  
# Function for finding number
# of K length subsequences
# whose product is even number
def countSubsequences(arr, n, k):
      
    countOdd = 0
  
    # Counting odd numbers in the array
    for i in range(n):
        if (arr[i] & 1):
            countOdd += 1;
  
    ans = nCr(n, k) - nCr(countOdd, k);
  
    return ans
      
# Driver code
arr = [ 2, 4 ]
K = 1
  
N = len(arr)
  
print(countSubsequences(arr, N, K))
  
# This code is contributed by ANKITKUAR34

C#




// C# implementation to count of K
// length subsequence whose product 
// is even
using System;
  
class GFG{
      
// Function to calculate nCr
static int nCr(int n, int r)
{
    if (r > n)
        return 0;
          
    return fact(n) / (fact(r) *
                      fact(n - r));
}
  
// Returns factorial of n
static int fact(int n)
{
    int res = 1;
    for(int i = 2; i <= n; i++)
        res = res * i;
          
    return res;
}
  
// Function for finding number
// of K length subsequences
// whose product is even number
static int countSubsequences(int []arr,
                             int n, int k)
{
    int countOdd = 0;
  
    // Counting odd numbers in the array
    for(int i = 0; i < n; i++)
    {
        if (arr[i] % 2 == 1)
            countOdd++;
    }
    int ans = nCr(n, k) - nCr(countOdd, k);
  
    return ans;
}
  
// Driver code
public static void Main(String []args)
{
    int []arr = { 2, 4 };
    int K = 1;
  
    int N = arr.Length;
  
    Console.WriteLine(countSubsequences(arr, N, K));
}
}
  
// This code is contributed by Princi Singh
Output: 
2

 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. 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
Recommended Articles
Page :