# Number of Subsequences with Even and Odd Sum | Set 2

Given an array arr[] of size N. The task is to find the number of subsequences whose sum is even and the number of subsequences whose sum is odd.

Examples:

Input: arr[] = {1, 2, 2, 3}
Output: EvenSum = 7, OddSum = 8
There are 2N-1 possible subsequences.
The subsequences with even sum are
1) {1, 3} Sum = 4
2) {1, 2, 2, 3} Sum = 8
3) {1, 2, 3} Sum = 6 (Of index 1)
4) {1, 2, 3} Sum = 6 (Of index 2)
5) {2} Sum = 2 (Of index 1)
6) {2, 2} Sum = 4
7) {2} Sum = 2 (Of index 2)
and the rest subsequence is of odd sum.

Input: arr[] = { 2, 2, 2, 2 }
Output: EvenSum = 15, OddSum = 0

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

Approach: This article already exists here having time complexity of where N is the size of array. Visit here before moving further.

• If we can find the number of odd subsequences then we can easily find the number of even subsequences.
• The odd subsequences can be formed in two ways:
1. By taking odd number odd times.
2. Taking even number and odd number odd time.
• Below are some variables and their definition:
• N = Total number of element in the array.
• Even = Total number of evens in the array.
• Odd = Total number of odd in the array.
• Tseq = Total number of subsequences.
• Oseq = Total number of subsequences with only odd number.
• Eseq = Total number of subsequences with even number.
• OddSumSeq = Total number of subsequences with odd sum.
• EvenSumSeq = Total number of subsequences with even sum.

Tseq = 2N – 1 = Even Subsequence + OddSubsequence

Eseq = 2Even

Oseq = OddC1 + OddC3 + OddC5 + . . . .
where OddC1 = Choosing 1 Odd
OddC3 = Choosing 3 Odd and so on

We can reduce the above equation by this identity, Hence

Oseq = 2Odd – 1

So, hence for the total odd sum subsequence, it can be calculated by multiplying these above result

OddSumSeq = 2Even * 2Odd – 1

EvenSumSeq = 2N – 1 – OddSumSeq

Below is the implementation of the above approach:

## C++

 `// CPP program to find number of ` `// Subsequences with Even and Odd Sum ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find number of ` `// Subsequences with Even and Odd Sum ` `pair<``int``, ``int``> countSum(``int` `arr[], ``int` `n) ` `{ ` `    ``int` `NumberOfOdds = 0, NumberOfEvens = 0; ` ` `  `    ``// Counting number of odds ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``if` `(arr[i] & 1) ` `            ``NumberOfOdds++; ` ` `  `    ``// Even count ` `    ``NumberOfEvens = n - NumberOfOdds; ` ` `  `    ``int` `NumberOfOddSubsequences = (1 << NumberOfEvens) ` `                                  ``* (1 << (NumberOfOdds - 1)); ` ` `  `    ``// Total Subsequences is (2^n - 1) ` `    ``// For NumberOfEvenSubsequences subtract ` `    ``// NumberOfOddSubsequences from total ` `    ``int` `NumberOfEvenSubsequences = (1 << n) - 1 ` `                                   ``- NumberOfOddSubsequences; ` ` `  `    ``return` `{ NumberOfEvenSubsequences, ` `             ``NumberOfOddSubsequences }; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 1, 2, 2, 3 }; ` ` `  `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` ` `  `    ``// Calling the function ` `    ``pair<``int``, ``int``> ans = countSum(arr, n); ` ` `  `    ``cout << ``"EvenSum = "` `<< ans.first; ` `    ``cout << ``" OddSum = "` `<< ans.second; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to find number of ` `// Subsequences with Even and Odd Sum ` `import` `java.util.*; ` ` `  `class` `GFG  ` `{ ` `static` `class` `pair ` `{  ` `    ``int` `first, second;  ` `    ``public` `pair(``int` `first, ``int` `second)  ` `    ``{  ` `        ``this``.first = first;  ` `        ``this``.second = second;  ` `    ``}  ` `} ` ` `  `// Function to find number of ` `// Subsequences with Even and Odd Sum ` `static` `pair countSum(``int` `arr[], ``int` `n) ` `{ ` `    ``int` `NumberOfOdds = ``0``, NumberOfEvens = ``0``; ` ` `  `    ``// Counting number of odds ` `    ``for` `(``int` `i = ``0``; i < n; i++) ` `        ``if` `(arr[i] % ``2` `== ``1``) ` `            ``NumberOfOdds++; ` ` `  `    ``// Even count ` `    ``NumberOfEvens = n - NumberOfOdds; ` ` `  `    ``int` `NumberOfOddSubsequences = (``1` `<< NumberOfEvens) *  ` `                                  ``(``1` `<< (NumberOfOdds - ``1``)); ` ` `  `    ``// Total Subsequences is (2^n - 1) ` `    ``// For NumberOfEvenSubsequences subtract ` `    ``// NumberOfOddSubsequences from total ` `    ``int` `NumberOfEvenSubsequences = (``1` `<< n) - ``1` `-  ` `                                    ``NumberOfOddSubsequences; ` ` `  `    ``return` `new` `pair(NumberOfEvenSubsequences, ` `                    ``NumberOfOddSubsequences); ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args)  ` `{ ` `    ``int` `arr[] = { ``1``, ``2``, ``2``, ``3` `}; ` ` `  `    ``int` `n = arr.length; ` ` `  `    ``// Calling the function ` `    ``pair ans = countSum(arr, n); ` ` `  `    ``System.out.print(``"EvenSum = "` `+ ans.first); ` `    ``System.out.print(``" OddSum = "` `+ ans.second); ` `} ` `}  ` ` `  `// This code is contributed by PrinciRaj1992 `

## Python3

 `# Python3 program to find number of  ` `# Subsequences with Even and Odd Sum  ` ` `  `# Function to find number of  ` `# Subsequences with Even and Odd Sum  ` `def` `countSum(arr, n) :  ` ` `  `    ``NumberOfOdds ``=` `0``; NumberOfEvens ``=` `0``;  ` ` `  `    ``# Counting number of odds  ` `    ``for` `i ``in` `range``(n) :  ` `        ``if` `(arr[i] & ``1``) :  ` `            ``NumberOfOdds ``+``=` `1``;  ` ` `  `    ``# Even count  ` `    ``NumberOfEvens ``=` `n ``-` `NumberOfOdds;  ` ` `  `    ``NumberOfOddSubsequences ``=` `(``1` `<< NumberOfEvens) ``*` `\ ` `                              ``(``1` `<< (NumberOfOdds ``-` `1``));  ` ` `  `    ``# Total Subsequences is (2^n - 1)  ` `    ``# For NumberOfEvenSubsequences subtract  ` `    ``# NumberOfOddSubsequences from total  ` `    ``NumberOfEvenSubsequences ``=` `(``1` `<< n) ``-` `1` `-` `\ ` `                                ``NumberOfOddSubsequences;  ` ` `  `    ``return` `(NumberOfEvenSubsequences,  ` `            ``NumberOfOddSubsequences);  ` ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"``:  ` ` `  `    ``arr ``=` `[ ``1``, ``2``, ``2``, ``3` `];  ` ` `  `    ``n ``=` `len``(arr);  ` ` `  `    ``# Calling the function  ` `    ``ans ``=` `countSum(arr, n);  ` ` `  `    ``print``(``"EvenSum ="``, ans[``0``], end ``=` `" "``);  ` `    ``print``(``"OddSum ="``, ans[``1``]);  ` ` `  `# This code is contributed by AnkitRai01 `

## C#

 `// C# program to find number of ` `// Subsequences with Even and Odd Sum ` `using` `System; ` `     `  `class` `GFG  ` `{ ` `public` `class` `pair ` `{  ` `    ``public` `int` `first, second;  ` `    ``public` `pair(``int` `first, ``int` `second)  ` `    ``{  ` `        ``this``.first = first;  ` `        ``this``.second = second;  ` `    ``}  ` `} ` ` `  `// Function to find number of ` `// Subsequences with Even and Odd Sum ` `static` `pair countSum(``int` `[]arr, ``int` `n) ` `{ ` `    ``int` `NumberOfOdds = 0, NumberOfEvens = 0; ` ` `  `    ``// Counting number of odds ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``if` `(arr[i] % 2 == 1) ` `            ``NumberOfOdds++; ` ` `  `    ``// Even count ` `    ``NumberOfEvens = n - NumberOfOdds; ` ` `  `    ``int` `NumberOfOddSubsequences = (1 << NumberOfEvens) *  ` `                                  ``(1 << (NumberOfOdds - 1)); ` ` `  `    ``// Total Subsequences is (2^n - 1) ` `    ``// For NumberOfEvenSubsequences subtract ` `    ``// NumberOfOddSubsequences from total ` `    ``int` `NumberOfEvenSubsequences = (1 << n) - 1 -  ` `                                    ``NumberOfOddSubsequences; ` ` `  `    ``return` `new` `pair(NumberOfEvenSubsequences, ` `                    ``NumberOfOddSubsequences); ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main(String[] args)  ` `{ ` `    ``int` `[]arr = { 1, 2, 2, 3 }; ` ` `  `    ``int` `n = arr.Length; ` ` `  `    ``// Calling the function ` `    ``pair ans = countSum(arr, n); ` ` `  `    ``Console.Write(``"EvenSum = "` `+ ans.first); ` `    ``Console.Write(``" OddSum = "` `+ ans.second); ` `} ` `}  ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```EvenSum = 7 OddSum = 8
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

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.