 Open in App
Not now

# Maximum prime moves to convert X to Y

• Last Updated : 08 Mar, 2022

Given two integers X and Y, the task is to convert X to Y using the following operations:

1. Add any prime number to X.
2. Subtract any prime number from Y.

Print the maximum number of such operations required or -1 if it is not possible to convert X to Y.
Examples:

Input: X = 2, Y = 4
Output:
2 -> 4
Input: X = 5, Y = 6
Output: -1
It is impossible to convert 5 to 6
with the given operations.

Approach: As the task is to maximize the operations, so the minimum possible value must be added to X in every operation. Since the value has to be prime, so the minimum two primes i.e. 2 and 3 can be used as they both are prime and can cover both even and odd parity. Now, there are three cases:

• If X > Y then the answer will be -1 as X cannot be made equal to Y with the given operation.
• If X = Y then the answer will be 0.
• If X < Y then calculate P = Y – X and,
• If P = 1 then the answer will be -1 as 1 is not prime and it cannot be added or subtracted.
• If P is even then 2 can be repeatedly added to X and the answer will be P / 2
• If P is even then add 3 to X and then 2 can again be repeatedly added to the new X to make it equal to Y, the result, in this case, will be 1 + ((P – 3) / 2).

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to return the maximum operations``// required to convert X to Y``int` `maxOperations(``int` `X, ``int` `Y)``{` `    ``// X cannot be converted to Y``    ``if` `(X > Y)``        ``return` `-1;` `    ``int` `diff = Y - X;` `    ``// If the difference is 1``    ``if` `(diff == 1)``        ``return` `-1;` `    ``// If the difference is even``    ``if` `(diff % 2 == 0)``        ``return` `(diff / 2);` `    ``// Add 3 to X and the new``    ``// difference will be even``    ``return` `(1 + ((diff - 3) / 2));``}` `// Driver code``int` `main()``{``    ``int` `X = 5, Y = 16;` `    ``cout << maxOperations(X, Y);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``class` `GFG``{` `// Function to return the maximum operations``// required to convert X to Y``static` `int` `maxOperations(``int` `X, ``int` `Y)``{` `    ``// X cannot be converted to Y``    ``if` `(X > Y)``        ``return` `-``1``;` `    ``int` `diff = Y - X;` `    ``// If the difference is 1``    ``if` `(diff == ``1``)``        ``return` `-``1``;` `    ``// If the difference is even``    ``if` `(diff % ``2` `== ``0``)``        ``return` `(diff / ``2``);` `    ``// Add 3 to X and the new``    ``// difference will be even``    ``return` `(``1` `+ ((diff - ``3``) / ``2``));``}` `// Driver code``public` `static` `void` `main(String []args)``{``    ``int` `X = ``5``, Y = ``16``;` `    ``System.out.println(maxOperations(X, Y));``}``}` `// This code is contributed by 29AjayKumar`

## Python3

 `# Python3 implementation of the approach` `# Function to return the maximum operations``# required to convert X to Y``def` `maxOperations(X, Y) :` `    ``# X cannot be converted to Y``    ``if` `(X > Y) :``        ``return` `-``1``;` `    ``diff ``=` `Y ``-` `X;` `    ``# If the difference is 1``    ``if` `(diff ``=``=` `1``) :``        ``return` `-``1``;` `    ``# If the difference is even``    ``if` `(diff ``%` `2` `=``=` `0``) :``        ``return` `(diff ``/``/` `2``);` `    ``# Add 3 to X and the new``    ``# difference will be even``    ``return` `(``1` `+` `((diff ``-` `3``) ``/``/` `2``));` `# Driver code``if` `__name__ ``=``=` `"__main__"` `:` `    ``X ``=` `5``; Y ``=` `16``;` `    ``print``(maxOperations(X, Y));` `# This code is contributed by AnkitRai01`

## C#

 `// C# implementation of the approach``using` `System;                   ` `class` `GFG``{`` ` `// Function to return the maximum operations``// required to convert X to Y``static` `int` `maxOperations(``int` `X, ``int` `Y)``{`` ` `    ``// X cannot be converted to Y``    ``if` `(X > Y)``        ``return` `-1;`` ` `    ``int` `diff = Y - X;`` ` `    ``// If the difference is 1``    ``if` `(diff == 1)``        ``return` `-1;`` ` `    ``// If the difference is even``    ``if` `(diff % 2 == 0)``        ``return` `(diff / 2);`` ` `    ``// Add 3 to X and the new``    ``// difference will be even``    ``return` `(1 + ((diff - 3) / 2));``}`` ` `// Driver code``public` `static` `void` `Main(String []args)``{``    ``int` `X = 5, Y = 16;`` ` `    ``Console.WriteLine(maxOperations(X, Y));``}``}` `// This code is contributed by PrinciRaj1992`

## Javascript

 ``

Output:

`5`

Time Complexity: O(1)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up