# Count of all possible values of X such that A % X = B

Given two integers A and B. The task is to find the count of all possible values X such that A % X = B. If there are infinite number of possible values then print -1.

Examples:

Input: A = 21, B = 5
Output: 2
8 and 16 are the only valid values for X.

Input: A = 5, B = 5
Output: -1
X can have any value > 5

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

Approach: There are three possible cases:

1. If A < B then no value of X can satisfy the given condition.
2. If A = B then infinite solutions are possible. So, print -1 as X can be any value greater than A.
3. If A > B then the number of divisors of (A – B) which are greater than B is the required count.

Below is the implementation of the above approach:

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to return the count ` `// of all possible values for x ` `// such that (A % x) = B ` `int` `countX(``int` `a, ``int` `b) ` `{ ` `    ``// Case 1 ` `    ``if` `(b > a) ` `        ``return` `0; ` ` `  `    ``// Case 2 ` `    ``else` `if` `(a == b) ` `        ``return` `-1; ` ` `  `    ``// Case 3 ` `    ``else` `{ ` `        ``int` `x = a - b, ans = 0; ` ` `  `        ``// Find the number of divisors of x ` `        ``// which are greater than b ` `        ``for` `(``int` `i = 1; i * i <= x; i++) { ` `            ``if` `(x % i == 0) { ` `                ``int` `d1 = i, d2 = b - 1; ` `                ``if` `(i * i != x) ` `                    ``d2 = x / i; ` `                ``if` `(d1 > b) ` `                    ``ans++; ` `                ``if` `(d2 > b) ` `                    ``ans++; ` `            ``} ` `        ``} ` `        ``return` `ans; ` `    ``} ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `a = 21, b = 5; ` ` `  `    ``cout << countX(a, b); ` ` `  `    ``return` `0; ` `} `

 `// Java implementation of the approach ` `class` `GFG ` `{ ` `     `  `    ``// Function to return the count  ` `    ``// of all possible values for x  ` `    ``// such that (A % x) = B  ` `    ``static` `int` `countX(``int` `a, ``int` `b)  ` `    ``{  ` `        ``// Case 1  ` `        ``if` `(b > a)  ` `            ``return` `0``;  ` `     `  `        ``// Case 2  ` `        ``else` `if` `(a == b)  ` `            ``return` `-``1``;  ` `     `  `        ``// Case 3  ` `        ``else` `        ``{  ` `            ``int` `x = a - b, ans = ``0``;  ` `     `  `            ``// Find the number of divisors of x  ` `            ``// which are greater than b  ` `            ``for` `(``int` `i = ``1``; i * i <= x; i++) ` `            ``{  ` `                ``if` `(x % i == ``0``) ` `                ``{  ` `                    ``int` `d1 = i, d2 = b - ``1``;  ` `                    ``if` `(i * i != x)  ` `                        ``d2 = x / i;  ` `                    ``if` `(d1 > b)  ` `                        ``ans++;  ` `                    ``if` `(d2 > b)  ` `                        ``ans++;  ` `                ``}  ` `            ``}  ` `            ``return` `ans;  ` `        ``}  ` `    ``}  ` ` `  `    ``// Driver code  ` `    ``static` `public` `void` `main (String args[])  ` `    ``{  ` `        ``int` `a = ``21``, b = ``5``;  ` `     `  `        ``System.out.println(countX(a, b));  ` `     `  `    ``}  ` `} ` ` `  `// This code is contributed by AnkitRai01 `

 `# Python 3 implementation of the approach ` ` `  `# Function to return the count ` `# of all possible values for x ` `# such that (A % x) = B ` `def` `countX( a, b): ` `    ``# Case 1 ` `    ``if` `(b > a): ` `        ``return` `0` ` `  `    ``# Case 2 ` `    ``elif` `(a ``=``=` `b): ` `        ``return` `-``1` ` `  `    ``# Case 3 ` `    ``else``: ` `        ``x ``=` `a ``-` `b ` `        ``ans ``=` `0` ` `  `        ``# Find the number of divisors of x ` `        ``# which are greater than b ` `        ``i ``=` `1` `        ``while` `i ``*` `i <``=` `x: ` `            ``if` `(x ``%` `i ``=``=` `0``): ` `                ``d1 ``=` `i ` `                ``d2 ``=` `b ``-` `1` `                ``if` `(i ``*` `i !``=` `x): ` `                    ``d2 ``=` `x ``/``/` `i ` `                ``if` `(d1 > b): ` `                    ``ans``+``=``1` `                ``if` `(d2 > b): ` `                    ``ans``+``=``1` `            ``i``+``=``1` `        ``return` `ans ` ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``: ` `    ``a ``=` `21` `    ``b ``=` `5` ` `  `    ``print``(countX(a, b)) ` `     `  `    ``# This code is contributed by ChitraNayal `

 `// C# implementation of the approach ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `    ``// Function to return the count  ` `    ``// of all possible values for x  ` `    ``// such that (A % x) = B  ` `    ``static` `int` `countX(``int` `a, ``int` `b)  ` `    ``{  ` `        ``// Case 1  ` `        ``if` `(b > a)  ` `            ``return` `0;  ` `     `  `        ``// Case 2  ` `        ``else` `if` `(a == b)  ` `            ``return` `-1;  ` `     `  `        ``// Case 3  ` `        ``else` `        ``{  ` `            ``int` `x = a - b, ans = 0;  ` `     `  `            ``// Find the number of divisors of x  ` `            ``// which are greater than b  ` `            ``for` `(``int` `i = 1; i * i <= x; i++) ` `            ``{  ` `                ``if` `(x % i == 0) ` `                ``{  ` `                    ``int` `d1 = i, d2 = b - 1;  ` `                    ``if` `(i * i != x)  ` `                        ``d2 = x / i;  ` `                    ``if` `(d1 > b)  ` `                        ``ans++;  ` `                    ``if` `(d2 > b)  ` `                        ``ans++;  ` `                ``}  ` `            ``}  ` `            ``return` `ans;  ` `        ``}  ` `    ``}  ` ` `  `    ``// Driver code  ` `    ``static` `public` `void` `Main ()  ` `    ``{  ` `        ``int` `a = 21, b = 5;  ` `     `  `        ``Console.WriteLine(countX(a, b));  ` `     `  `    ``}  ` `} ` ` `  `// This code is contributed by anuj_67.. `

Output:
```2
```