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: 2
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:
- If A < B then no value of X can satisfy the given condition.
- If A = B then infinite solutions are possible. So, print -1 as X can be any value greater than A.
- 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 <bits/stdc++.h> 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
<script> // Javascript implementation of the approach // Function to return the count // of all possible values for x // such that (A % x) = B function countX(a, b) { // Case 1 if (b > a) return 0; // Case 2 else if (a == b) return -1; // Case 3 else { let x = a - b, ans = 0; // Find the number of divisors of x // which are greater than b for (let i = 1; i * i <= x; i++) { if (x % i == 0) { let d1 = i, d2 = b - 1; if (i * i != x) d2 = parseInt(x / i); if (d1 > b) ans++; if (d2 > b) ans++; } } return ans; } } // Driver code let a = 21, b = 5; document.write(countX(a, b)); </script> |
2
Time Complexity: O(sqrt(a – b))
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!