Given two positive integers. Count the number of pairs (a, b) such that 1 ≤ a ≤ x, 1 ≤ b ≤ y and a+b is even.
Examples:
Input: 2 7 Output: Count of pairs is 7 Input: 1 1 Output: Count of pairs is 1 Input: 4 9 Output: Count of pairs is 18 Input: 3 5 Output: Count of pairs is 8
Simple Approach :
A simple approach will be to run two nested loops to count all possible pair of elements such that 1 ≤ a ≤ x, 1 ≤ b ≤ y and a+b is even.
If yes then we increment count and return the count.
Implementation:
// A O(n ^ 2) time and O(1) extra space C++ program to // count the number of pairs (a, b) // such that 1 ≤ a ≤ x, 1 ≤ b ≤ y and a+b is even #include <bits/stdc++.h> using namespace std; // Returns the number of pairs (a, b) // such that 1 ≤ a ≤ x, 1 ≤ b ≤ y and a+b is even int getPairsCount(int x, int y) { int count = 0; for (int i = 1; i <= x; i++) { for (int j = 1; j <= y; j++) { if ((i + j) % 2 == 0) // check pair is even or not count++; } } return count; } // Driver function to test the above function int main() { int x = 2, y = 7; cout << "Count of pairs is " << getPairsCount(x, y); return 0; }
Output:
Count of pairs is 7
Time Complexity: O(n^2)
Auxiliary Space: O(1)
Efficient Approach :
If a is even and b is even then sum of pair (a,b) is also even but if a is odd and b is odd then sum of pair (a,b) will be even.
Total even numbers between 1 to x will be x/2
Total odd numbers between 1 to x will be (x+1)/2
Total even numbers between 1 to y will be y/2
Total odd numbers between 1 to y will be (y+1)/2
Therefore, the number of pairs (a,b) where a+b is even :
(x/2) * (y/2)+((x+1)/2)*((y+1)/2)
Implementation:
// A O(1) time and O(1) extra space C++ program to // count the number of pairs (a, b) // such that 1 ≤ a ≤ x, 1 ≤ b ≤ y and a+b is even #include <bits/stdc++.h> using namespace std; // Returns the number of pairs (a, b) // such that 1 ≤ a ≤ x, 1 ≤ b ≤ y and a+b is even int getPairsCount(int x, int y) { int even_x = x / 2; // store the half of x int even_y = y / 2; // store the half of y int odd_x = (x + 1) / 2; int odd_y = (y + 1) / 2; int res = even_x * even_y + odd_x * odd_y; return res; } // Driver function to test the above function int main() { int x = 2, y = 7; cout << "Count of pairs is " << getPairsCount(x, y); return 0; }
Output:
Count of pairs is 7
Time Complexity: O(1)
Auxiliary Space: O(1)