 Open in App
Not now

# Check if N and M can be made equal by increasing N by A and decreasing M by B

• Last Updated : 30 Mar, 2020

Given four numbers M, N, A and B, the task is to check whether M and N can be made equal to each other by doing any of the below operations:

• M can be increased by A and N can be decreased by B
• Leave both of them as it is.

Examples:

Input: M = 2, N = 8, A = 3, B = 3
Output: Yes
Explanation:
After first Operation:
M can be increased by A. Therefore, M = 2 + 3 = 5
N can be decreased by B. Therefore, N = 8 – 3 = 5
Finally, M = N = 5.

Input: M = 6, N = 4, A = 2, B = 1
Output: No

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: On careful observation, it can be observed that since we are increasing M and decreasing N, they can be made equal only when M is less than N. Therefore when M is less than N, there are two cases at each step:

1. M can be increased by A and N can be decreased by B.
2. Leave both of them as it is.

Another observation which can be made is that when M is increased and N is decreased, the absolute distance between M and N is reduced by the factor of A + B. For example:

Let M = 2, N = 14, A = 3 and B = 3.

• In step 1, M = 5 and N = 11. The absolute distance between M and N got reduced by 6. That is, initially, the absolute distance was 12(14 – 2). After performing the given step, the absolute distance became 6(11 – 5).
• In step 2, M = 8 and N = 8. The absolute distance between M and N again got reduced by 6 thereby making M and N equal.

From the above example, we can come to the conclusion that this problem can be solved in a constant time only by checking if the absolute distance between M and N is a multiple of (A + B) or not.

• If it is a multiple, then M and N can be made equal.
• Else, they cannot be made equal.

Below is the implementation of the above approach:

## C++

 `// C++ program to check if two numbers``// can be made equal by increasing``// the first by a and decreasing``// the second by b`` ` `#include ``using` `namespace` `std;`` ` `// Function to whether the numbers``// can be made equal or not``bool` `checkEqualNo(``int` `m, ``int` `n, ``int` `a, ``int` `b)``{``    ``if` `(m <= n) {`` ` `        ``// Check whether the numbers can reach``        ``// an equal point or not``        ``if` `((n - m) % (a + b) == 0) {``            ``return` `true``;``        ``}``        ``else` `{``            ``return` `false``;``        ``}``    ``}``    ``else` `{`` ` `        ``// M and N cannot be made equal by``        ``// increasing M and decreasing N when``        ``// M is already greater than N``        ``return` `false``;``    ``}``}`` ` `// Driver code``int` `main()``{``    ``int` `M = 2, N = 8;``    ``int` `A = 3, B = 3;`` ` `    ``if` `(checkEqualNo(M, N, A, B)) ``        ``cout << ``"Yes"` `<< endl;``    ``else``        ``cout << ``"No"` `<< endl;`` ` `return` `0;``}`

## Java

 `// Java program to check if two numbers``// can be made equal by increasing``// the first by a and decreasing``// the second by b``class` `GFG ``{``     ` `    ``// Function to whether the numbers``    ``// can be made equal or not``    ``static` `boolean` `checkEqualNo(``int` `m, ``int` `n, ``int` `a, ``int` `b)``    ``{``        ``if` `(m <= n) {``     ` `            ``// Check whether the numbers can reach``            ``// an equal point or not``            ``if` `((n - m) % (a + b) == ``0``) {``                ``return` `true``;``            ``}``            ``else` `{``                ``return` `false``;``            ``}``        ``}``        ``else` `{``     ` `            ``// M and N cannot be made equal by``            ``// increasing M and decreasing N when``            ``// M is already greater than N``            ``return` `false``;``        ``}``    ``}``     ` `    ``// Driver code``    ``public` `static` `void` `main (String[] args)``    ``{``        ``int` `M = ``2``, N = ``8``;``        ``int` `A = ``3``, B = ``3``;``     ` `        ``if` `(checkEqualNo(M, N, A, B) == ``true``) ``            ``System.out.println(``"Yes"``);``        ``else``            ``System.out.println(``"No"``);``     ` `    ``}``}`` ` `// This code is contributed by Yash_R`

## Python3

 `# Python3 program to check if two numbers``# can be made equal by increasing``# the first by a and decreasing``# the second by b`` ` `# Function to whether the numbers``# can be made equal or not``def` `checkEqualNo(m, n, a, b) :``    ``if` `(m <``=` `n) :`` ` `        ``# Check whether the numbers can reach``        ``# an equal point or not``        ``if` `((n ``-` `m) ``%` `(a ``+` `b) ``=``=` `0``) :``            ``return` `True``;``     ` `        ``else` `:``            ``return` `False``;``         ` `    ``else` `:`` ` `        ``# M and N cannot be made equal by``        ``# increasing M and decreasing N when``        ``# M is already greater than N``        ``return` `False``;``     ` `# Driver code``if` `__name__ ``=``=` `"__main__"` `:`` ` `    ``M ``=` `2``; N ``=` `8``;``    ``A ``=` `3``; B ``=` `3``;`` ` `    ``if` `(checkEqualNo(M, N, A, B)) :``        ``print``(``"Yes"``);``    ``else` `:``        ``print``(``"No"``);`` ` `# This code is contributed by Yash_R`

## C#

 `// C# program to check if two numbers``// can be made equal by increasing``// the first by a and decreasing``// the second by b``using` `System;`` ` `class` `GFG ``{``     ` `    ``// Function to whether the numbers``    ``// can be made equal or not``    ``static` `bool` `checkEqualNo(``int` `m, ``int` `n, ``int` `a, ``int` `b)``    ``{``        ``if` `(m <= n) {``     ` `            ``// Check whether the numbers can reach``            ``// an equal point or not``            ``if` `((n - m) % (a + b) == 0) {``                ``return` `true``;``            ``}``            ``else` `{``                ``return` `false``;``            ``}``        ``}``        ``else` `{``     ` `            ``// M and N cannot be made equal by``            ``// increasing M and decreasing N when``            ``// M is already greater than N``            ``return` `false``;``        ``}``    ``}``     ` `    ``// Driver code``    ``public` `static` `void` `Main (String[] args)``    ``{``        ``int` `M = 2;``        ``int` `N = 8;``        ``int` `A = 3;``        ``int` `B = 3;``     ` `        ``if` `(checkEqualNo(M, N, A, B) == ``true``) ``            ``Console.WriteLine(``"Yes"``);``        ``else``            ``Console.WriteLine(``"No"``);``    ``}``}`` ` `// This code is contributed by Yash_R`

Output:

```Yes
```

My Personal Notes arrow_drop_up