GeeksforGeeks App
Open App
Browser
Continue

# Count of pairs in a given range with sum of their product and sum equal to their concatenated number

Given two numbers A and B, the task is to find the count of pairs (X, Y) in range [A, B], such that (X * Y) + (X + Y) is equal to the number formed by concatenation of X and Y
Examples:

Input: A = 1, B = 9
Output:
Explanation:
The pairs (1, 9), (2, 9), (3, 9), (4, 9), (5, 9), (6, 9), (7, 9), (8, 9) and (9, 9) are the required pairs.
Input: A = 4, B = 10
Output:
Explanation: The pairs (4, 9), (5, 9), (6, 9), (7, 9), (8, 9), (9, 9) and (10, 9) satisfy the required condition.

Approach :
We can observe that any number of the form [9, 99, 999, 9999, ….] satisfies the condition with all other values.

Illustration:
If Y = 9, the required condition is satisfied for all values of X.
{1*9 + (1 + 9) = 19, 2*9 + (2 + 9) = 29, ……….. 11*9 + (11 + 9) = 119 …..
Similarly, for Y = 99, 1*99 + 1 + 99 = 199, 2*99 + 2 + 99 = 299, ………

Hence, follow the steps below to solve the problems:

1. Count the number of possible values of Y of the form {9, 99, 999, 9999, ….} in range [A, B] and store in countY
2. Count the number of possible values of X in the range [A, B] as countX

`countX = (B - A + 1)`
1.
2. The required count will be the product of possible count of X and Y, i.e.

`answer = countX * countY`
1.

Below is the implementation of the above approach:

## C++

 `// C++ program to count``// all the possible pairs``// with X*Y + (X + Y) equal to``// number formed by``// concatenating X and Y` `#include ``using` `namespace` `std;` `// Function for counting pairs``int` `countPairs(``int` `A, ``int` `B)``{` `    ``int` `countY = 0,``        ``countX = (B - A) + 1,``        ``next_val = 9;` `    ``// Count possible values``    ``// of Y``    ``while` `(next_val <= B) {``        ``if` `(next_val >= A) {``            ``countY += 1;``        ``}``        ``next_val = next_val * 10 + 9;``    ``}` `    ``return` `(countX * countY);``}` `// Driver Code``int` `main()``{``    ``int` `A = 1;``    ``int` `B = 16;``    ``cout << countPairs(A, B);``    ``return` `0;``}`

## Java

 `// Java program to count``// all the possible pairs``// with X*Y + (X + Y) equal to``// number formed by``// concatenating X and Y``import` `java.util.*;``class` `GFG{` `// Function for counting pairs``static` `int` `countPairs(``int` `A, ``int` `B)``{``    ``int` `countY = ``0``,``        ``countX = (B - A) + ``1``,``        ``next_val = ``9``;` `    ``// Count possible values``    ``// of Y``    ``while` `(next_val <= B)``    ``{``        ``if` `(next_val >= A)``        ``{``            ``countY += ``1``;``        ``}``        ``next_val = next_val * ``10` `+ ``9``;``    ``}``    ``return` `(countX * countY);``}` `// Driver Code``public` `static` `void` `main(String args[])``{``    ``int` `A = ``1``;``    ``int` `B = ``16``;``    ``System.out.print(countPairs(A, B));``}``}` `// This code is contributed by Code_Mech`

## Python3

 `# Python3 program to count``# all the possible pairs``# with X*Y + (X + Y) equal to``# number formed by``# concatenating X and Y` `# Function for counting pairs``def` `countPairs(A, B):` `    ``countY ``=` `0``    ``countX ``=` `(B ``-` `A) ``+` `1``    ``next_val ``=` `9` `    ``# Count possible values``    ``# of Y``    ``while` `(next_val <``=` `B):``        ``if` `(next_val >``=` `A):``            ``countY ``+``=` `1``        ``next_val ``=` `next_val ``*` `10` `+` `9` `    ``return` `(countX ``*` `countY)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``A ``=` `1``    ``B ``=` `16``    ` `    ``print``(countPairs(A, B))` `# This code is contributed by mohit kumar 29`

## C#

 `// C# program to count``// all the possible pairs``// with X*Y + (X + Y) equal to``// number formed by``// concatenating X and Y``using` `System;``class` `GFG{` `// Function for counting pairs``static` `int` `countPairs(``int` `A, ``int` `B)``{``    ``int` `countY = 0,``        ``countX = (B - A) + 1,``        ``next_val = 9;` `    ``// Count possible values``    ``// of Y``    ``while` `(next_val <= B)``    ``{``        ``if` `(next_val >= A)``        ``{``            ``countY += 1;``        ``}``        ``next_val = next_val * 10 + 9;``    ``}``    ``return` `(countX * countY);``}` `// Driver Code``public` `static` `void` `Main()``{``    ``int` `A = 1;``    ``int` `B = 16;``    ``Console.Write(countPairs(A, B));``}``}` `// This code is contributed by Akanksha_Rai`

## Javascript

 ``

Output:

`16`

Time Complexity: O(log10(B))
Space Complexity: O(1)

My Personal Notes arrow_drop_up