Open In App

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

Last Updated : 30 May, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

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


Next Article

Similar Reads