# Given two numbers a and b find all x such that a % x = b

• Difficulty Level : Medium
• Last Updated : 30 Mar, 2021

Given two numbers a and b find all x such that a % x = b.

Examples:

```Input : a = 21, b = 5
Output : 2
The answers of the Modular Equation are
8 and 16 since 21 % 8 = 21 % 16 = 5 .```

Here 3 cases arises :

1. If ( a < b ) then there will be no answer .
2. If ( a = b ) then all the numbers greater than a are the answer so there will be infinite solutions possible.
3. If ( a > b ) Suppose x is an answer to our equation. Then x divides (a – b). Also since a % x = b then b < x. These conditions are necessary and sufficient as well. So the answer is number of divisors of a – b which are strictly greater than b which can be solved in O(sqrt( a-b )). Here only one case arises which we have to deal separately when (a-b) is perfect square then we will add its square root two times so we have to subtract one times, if this case arises.

## C++

 `// C++ program to find x such that a % x is equal` `// to b.` `#include ` `using` `namespace` `std;`   `void` `modularEquation(``int` `a, ``int` `b)` `{` `    ``// if a is less than b then no solution` `    ``if` `(a < b) {` `        ``cout << ``"No solution possible "` `<< endl;` `        ``return``;` `    ``}`   `    ``// if a is equal to b then every number` `    ``// greater than a will be the solution` `    ``// so its infinity` `    ``if` `(a == b) {` `        ``cout << ``"Infinite Solution possible "` `<< endl;` `        ``return``;` `    ``}`   `    ``// all resultant number should be greater than` `    ``// b and (a-b) should be divisible by resultant` `    ``// number`   `    ``// count variable store the number of values` `    ``// possible` `    ``int` `count = 0;` `    ``int` `n = a - b;` `    ``int` `y = ``sqrt``(a - b);` `    ``for` `(``int` `i = 1; i <= y; ++i) {` `        ``if` `(n % i == 0) {`   `            ``// checking for both divisor and quotient` `            ``// whether they divide ( a-b ) completely` `            ``// and greater than b .` `            ``if` `(n / i > b)` `                ``count++;` `            ``if` `(i > b)` `                ``count++;` `        ``}` `    ``}`   `    ``// Here y is added twice in the last iteration` `    ``// so 1 y should be decremented to get correct` `    ``// solution` `    ``if` `(y * y == n && y > b)` `        ``count--;`   `    ``cout << count << endl;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `a = 21, b = 5;` `    ``modularEquation(a, b);` `    ``return` `0;` `}`

## Java

 `// Java program to find x such that ` `// a % x is equal to b.` `import` `java.io.*;` `class` `GFG {` `    `  `static` `void` `modularEquation(``int` `a, ``int` `b)` `{` `    ``// if a is less than b then no solution` `    ``if` `(a < b) {` `        ``System.out.println(``"No solution possible "``);` `        ``return``;` `    ``}`   `    ``// if a is equal to b then every number` `    ``// greater than a will be the solution` `    ``// so its infinity` `    ``if` `(a == b) {` `        ``System.out.println(``"Infinite Solution possible "``);` `        ``return``;` `    ``}`   `    ``// all resultant number should be greater` `    ``// than b and (a-b) should be divisible ` `    ``// by resultant number`   `    ``// count variable store the number of` `    ``// values possible` `    ``int` `count = ``0``;` `    ``int` `n = a - b;` `    ``int` `y = (``int``)Math.sqrt(a - b);` `    ``for` `(``int` `i = ``1``; i <= y; ++i) {` `        ``if` `(n % i == ``0``) {`   `            ``// checking for both divisor and` `            ``// quotient whether they divide` `            ``// ( a-b ) completely and ` `            ``// greater than b .` `            ``if` `(n / i > b)` `                ``count++;` `            ``if` `(i > b)` `                ``count++;` `        ``}` `    ``}`   `    ``// Here y is added twice in the last ` `    ``// iteration so 1 y should be decremented` `    ``// to get correct solution` `    ``if` `(y * y == n && y > b)` `        ``count--;`   `    ``System.out.println(count);` `}`   `// Driver code` `public` `static` `void` `main(String[] args)` `{` `    ``int` `a = ``21``, b = ``5``;` `    ``modularEquation(a, b);` `}` `}`   `// This code is contributed by Prerna Saini`

## Python3

 `# Python3 program to find x such ` `# that a % x is equal to b.`   `import` `math` `def` `modularEquation(a, b) :` `    `  `    ``# if a is less than b then no solution` `    ``if` `(a < b) :` `        ``print``(``"No solution possible "``) ` `        ``return` `    `  `    ``# if a is equal to b then every number` `    ``# greater than a will be the solution` `    ``# so its infinity` `    ``if` `(a ``=``=` `b) :` `        ``print``(``"Infinite Solution possible "``)` `        ``return` `    `  `    ``# all resultant number should be ` `    ``# greater than b and (a-b) should ` `    ``# be divisible by resultant number` ` `  `    ``# count variable store the number ` `    ``# of values possible` `    ``count ``=` `0` `    ``n ``=` `a ``-` `b` `    ``y ``=` `(``int``)(math.sqrt(a ``-` `b))` `    ``for` `i ``in` `range``(``1``, y``+``1``) :` `        ``if` `(n ``%` `i ``=``=` `0``) :` `            `  `            ``# checking for both divisor ` `            ``# and quotient whether they` `            ``# divide ( a-b ) completely` `            ``# and greater than b .` `            ``if` `(n ``/` `i > b) :` `                ``count ``=` `count ``+` `1` `            ``if` `(i > b) :` `                ``count ``=` `count  ``+` `1` `        `  `        `  ` `  `    ``# Here y is added twice in the ` `    ``# last iteration so 1 y should be` `    ``# decremented to get correct` `    ``# solution` `    ``if` `(y ``*` `y ``=``=` `n ``and` `y > b) :` `        ``count ``=` `count ``-` `1` ` `  `    ``print` `(count)` ` `  `# Driver code` `a ``=` `21` `b ``=` `5` `modularEquation(a, b)`   `# This code is contributed by Nikita Tiwari.`

## C#

 `// C# program to find x such that ` `// a % x is equal to b.` `using` `System;`   `class` `GFG {` `    `  `static` `void` `modularEquation(``int` `a, ``int` `b)` `{` `    ``// if a is less than b then no solution` `    ``if` `(a < b) {` `        ``Console.WriteLine(``"No solution possible "``);` `        ``return``;` `    ``}`   `    ``// if a is equal to b then every number` `    ``// greater than a will be the solution` `    ``// so its infinity` `    ``if` `(a == b) {` `        ``Console.WriteLine(``"Infinite Solution possible "``);` `        ``return``;` `    ``}`   `    ``// all resultant number should be greater` `    ``// than b and (a-b) should be divisible ` `    ``// by resultant number`   `    ``// count variable store the number of` `    ``// values possible` `    ``int` `count = 0;` `    ``int` `n = a - b;` `    ``int` `y = (``int``)Math.Sqrt(a - b);` `    ``for` `(``int` `i = 1; i <= y; ++i) {` `        ``if` `(n % i == 0) {`   `            ``// checking for both divisor and` `            ``// quotient whether they divide` `            ``// ( a-b ) completely and ` `            ``// greater than b .` `            ``if` `(n / i > b)` `                ``count++;` `            ``if` `(i > b)` `                ``count++;` `        ``}` `    ``}`   `    ``// Here y is added twice in the last ` `    ``// iteration so 1 y should be decremented` `    ``// to get correct solution` `    ``if` `(y * y == n && y > b)` `        ``count--;`   `    ``Console.WriteLine(count);` `}`   `// Driver code` `public` `static` `void` `Main()` `{` `    ``int` `a = 21, b = 5;` `    ``modularEquation(a, b);` `}` `}`   `//This code is contributed by vt_m.`

## PHP

 ` ``\$b``)` `                ``\$count``++;` `            ``if` `(``\$i` `> ``\$b``)` `                ``\$count``++;` `        ``}` `    ``}`   `    ``// Here y is added twice` `    ``// in the last iteration` `    ``// so 1 y should be ` `    ``// decremented to get correct` `    ``// solution` `    ``if` `(``\$y` `* ``\$y` `== ``\$n` `&& ``\$y` `> ``\$b``)` `        ``\$count``--;`   `    ``echo` `\$count` `;` `}`   `    ``// Driver Code` `    ``\$a` `= 21; ` `    ``\$b` `= 5;` `    ``modularEquation(``\$a``, ``\$b``);`   `// This code is contributed by anuj_67.` `?>`

## Javascript

 ``

Output:

`2`

My Personal Notes arrow_drop_up
Recommended Articles
Page :