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

• Difficulty Level : Medium
• Last Updated : 17 May, 2021

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 an infinite number of possible values then print -1.
Examples:

Input: A = 21, B = 5
Output:
8 and 16 are the only valid values for X.
Input: A = 5, B = 5
Output: -1
X can have any value > 5

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++

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

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

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

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

## Javascript

 ``
Output:
`2`

My Personal Notes arrow_drop_up