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) = Bint 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 codeint main(){ int a = 21, b = 5; cout << countX(a, b); return 0;} |
Java
// Java implementation of the approachclass 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) = Bdef 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 codeif __name__ == "__main__": a = 21 b = 5 print(countX(a, b)) # This code is contributed by ChitraNayal |
C#
// C# implementation of the approachusing 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) = Bfunction 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!
