# 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