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> |
Output:
2
Time Complexity: O(sqrt(a – b))
Auxiliary Space: O(1)