GeeksforGeeks App
Open App
Browser
Continue

# Count possible values of K such that A%K = B%K

Given two integers A and B, the task is to count the possible values of K such that A%K = B%K. If the count is infinite, print -1.

Examples:

Input: A = 2, B = 4
Output: 2
Explanation: The set of all possible values of K is {1, 2}.
As 2%1 = 4%1 = 0 and 2%2 = 4%2 = 0.

Input: A = 5, B = 5
Output: -1
Explanation: There are infinite values of K as all possible integer value of K satisfies the given condition.

Approach: The given problem can be solved using the following observation that all values of A and B can be divided into the following two cases:

• The case where A = B. In such cases, all possible integer value of K is valid answer. Hence, the value of the required count is infinite.
• The case where A > B. In such cases, it can be observed that a value of K is valid if K divides (A – B). For cases with B > A, simply swap the values of A and B.

Therefore, calculate all the possible values of K such that it divides (A – B) completely which is the required value.

Below is the implementation of the above approach:

## C++14

 `// C++ Program of the above approach``#include ``using` `namespace` `std;` `// Function to find the count of the``// values of K such that A%K = B%K``int` `countInt(``int` `A, ``int` `B)``{``    ``// If the count is Infinite``    ``if` `(A == B)``        ``return` `-1;` `    ``int` `diff = ``abs``(A - B);` `    ``// Stores the required count``    ``int` `count = 0;` `    ``// Loop to calculate all the``    ``// divisors of diff``    ``for` `(``int` `i = 1; i * i <= diff; i++) {``        ``if` `(diff % i == 0) {` `            ``// Increment count for i``            ``if` `(diff == i * i)``                ``count++;` `            ``// Increment count for i``            ``// and diff / i both``            ``else``                ``count += 2;``        ``}``    ``}` `    ``// Return Answer``    ``return` `count;``}` `// Driver code``int` `main()``{``    ``int` `A = 2, B = 4;``    ``cout << countInt(A, B);``    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.io.*;``import` `java.lang.*;``import` `java.util.*;` `class` `GFG {` `  ``// Function to find the count of the``  ``// values of K such that A%K = B%K``  ``static` `int` `countInt(``int` `A, ``int` `B)``  ``{``    ` `    ``// If the count is Infinite``    ``if` `(A == B)``      ``return` `-``1``;` `    ``int` `diff = Math.abs(A - B);` `    ``// Stores the required count``    ``int` `count = ``0``;` `    ``// Loop to calculate all the``    ``// divisors of diff``    ``for` `(``int` `i = ``1``; i * i <= diff; i++) {``      ``if` `(diff % i == ``0``) {` `        ``// Increment count for i``        ``if` `(diff == i * i)``          ``count++;` `        ``// Increment count for i``        ``// and diff / i both``        ``else``          ``count += ``2``;``      ``}``    ``}` `    ``// Return Answer``    ``return` `count;``  ``}` `  ``// Driver code``  ``public` `static` `void` `main (String[] args) {` `    ``int` `A = ``2``, B = ``4``;``    ``System.out.print(countInt(A, B));``  ``}``}` `// This code is contributed by hrithikgarg03188.`

## Python3

 `# Python code for the above approach` `# Function to find the count of the``# values of K such that A%K = B%K``def` `countInt(A, B):``  ` `    ``# If the count is Infinite``    ``if` `(A ``=``=` `B):``        ``return` `-``1``;` `    ``diff ``=` `abs``(A ``-` `B);` `    ``# Stores the required count``    ``count ``=` `0``;` `    ``# Loop to calculate all the``    ``# divisors of diff``    ``i ``=` `1``;``    ``while``((i ``*` `i) <``=` `diff):``        ``if` `(diff ``%` `i ``=``=` `0``):` `            ``# Increment count for i``            ``if` `(diff ``=``=` `i ``*` `i):``                ``count ``+``=` `1` `            ``# Increment count for i``            ``# and diff / i both``            ``else``:``                ``count ``+``=` `2``;``        ``i ``+``=` `1``    ``# Return Answer``    ``return` `count;` `# Driver code` `A ``=` `2``B ``=` `4``print``(countInt(A, B));` `# This code is contributed by Saurabh Jaiswal`

## C#

 `// C# Program of the above approach``using` `System;``class` `GFG {``    ``// Function to find the count of the``    ``// values of K such that A%K = B%K``    ``static` `int` `countInt(``int` `A, ``int` `B)``    ``{``        ``// If the count is Infinite``        ``if` `(A == B)``            ``return` `-1;` `        ``int` `diff = Math.Abs(A - B);` `        ``// Stores the required count``        ``int` `count = 0;` `        ``// Loop to calculate all the``        ``// divisors of diff``        ``for` `(``int` `i = 1; i * i <= diff; i++) {``            ``if` `(diff % i == 0) {` `                ``// Increment count for i``                ``if` `(diff == i * i)``                    ``count++;` `                ``// Increment count for i``                ``// and diff / i both``                ``else``                    ``count += 2;``            ``}``        ``}` `        ``// Return Answer``        ``return` `count;``    ``}` `    ``// Driver code``    ``public` `static` `int` `Main()``    ``{``        ``int` `A = 2, B = 4;``        ``Console.Write(countInt(A, B));``        ``return` `0;``    ``}``}` `// This code is contributed by Taranpreet`

## Javascript

 ``

Output

`2`

Time Complexity: O(√(A – B))
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up