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

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

pawanasipugmailcom

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.

Article Tags :